[英]Prevent needing to add NuGet.exe to source control
一些背景:
我跟着上使用的NuGet不提交包教程取得了一些成功。 通过手动为nuget.targets文件添加<RestorePackages>
和<Import ...>
解决此NuGet问题后 ,一切正常。
但是,一旦使用Mercurial克隆了存储库,构建时就会出现以下错误:
无法找到'C:\\ ... \\ Visual Studio 2010 \\ Projects \\ MyProject \\ .nuget \\ nuget.exe'
这是有道理的,因为我的忽略模式从exe文件检查阻止我。 从这个相关的SO问题中,我推断出将此文件包含在版本控制中并不少见(或者是?),但实际上,如果可以帮助,我宁愿不将NuGet.exe提交到版本控制中 。
问题: 是否有方便的方法来防止需要检查NuGet.exe?
我已经尝试了一些Google-fu,浏览了文档,并轻抚了NuGet.targets文件,但到目前为止还算不错。 如果我可以动态地指向大厦溶液中的特定环境的NuGet.exe似乎最好。
我知道我可以只添加exe文件,但是我更想知道是否还有其他方法可以解决这个问题,或者为什么没有可行的选择。
更新:
nuget.targets文件包含一些相关的xml:
<!-- only (relevant) parts of the xml shown below -->
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
...
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[
try {
OutputFilename = Path.GetFullPath(OutputFilename);
Log.LogMessage("Downloading latest version of NuGet.exe...");
WebClient webClient = new WebClient();
webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);
return true;
}
catch (Exception ex) {
Log.LogErrorFromException(ex);
return false;
}
]]>
</Code>
</task>
</UsingTask>
我不熟悉.targets文件的工作原理,但这似乎与我要寻找的类似。 戴着牛仔帽,我尝试将DownloadNuGetExe元素中的false
更改为true
,但这并没有按预期进行(无论是否带有condition属性)。
只是检查:nuget.targets是一个MSBuild文件。 你是对的方式,在:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
将值更改为true:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
但是您必须重新启动Visual Studio或重新加载解决方案(请参见注释) ,然后才能生效。
看着那.targets
文件,还有另一种方式来做到这一点,如果你既要检查NuGet.exe
中,也每次都下载。 关键是:
<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
遵循仅设置属性(如果尚未定义)的MSBuild约定,此值默认为解决方案的NuGet.exe
本地副本,如果DownloadNuGetExe
属性为true
,则下载该属性。 但MSBuild的属性可以通过环境变量覆盖。
如果您已经将NuGet下载到某个中央位置,则可以将DownloadNuGetExe
保留为false
并定义一个名为NUGETEXEPATH
的环境变量,它将代替使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.