防止需要将NuGet.exe添加到源代码pipe理

一些背景:
我已经按照使用NuGet的教程没有提交一些成功的包 。 通过手动添加<RestorePackages>和一个<Import ...> nuget.targets文件解决了这个NuGet问题后 ,事情正在工作。

但是,一旦我使用Mercurial克隆存储库,构build时出现以下错误:

无法find“C:\ … \ Visual Studio 2010 \ Projects \ MyProject \ .nuget \ nuget.exe”

这是有道理的,因为我的忽略模式阻止我检查exe文件。 从这个相关的SO问题中,我推断出这个文件在版本控制(或者是?)中并不罕见,但是如果我可以帮助的话,我真的不希望将NuGet.exe提交到版本控制


问题:有没有一种方便的方法来防止需要检查NuGet.exe?


我已经尝试了一些Google-fu,浏览文档,并且用NuGet.targets文件摆弄,到目前为止没有运气。 如果我可以dynamic指向构build解决scheme的特定环境的NuGet.exe,似乎更可取。

我知道我可以添加exe文件,但我更想知道是否有其他方法来处理这个问题,或知道为什么没有可行的select。

更新:
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 ,但是这并没有像预期的那样工作(有或没有条件属性)。

刚刚选中:nuget.targets是一个msbuild文件。 而你在正确的方向,在:

 <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe> 

将值更改为true:

 <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe> 

但是在此之后,您必须重新启动Visual Studio或重新加载解决scheme(请参阅注释)才能生效。

看看.targets文件,还有另一种方法来做到这一点,如果你既不想检查NuGet.exe ,也不是每次下载。 关键是这样的:

 <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath> 

如果尚未定义属性,则按照MSBuild约定,此值默认为解决scheme的NuGet.exe本地副本,如果DownloadNuGetExe属性为true ,则下载它。 但是MSBuild属性可以被环境variables覆盖。

如果您已经将NuGet下载到某个中央位置,则可以将DownloadNuGetExefalse并定义一个名为NUGETEXEPATH的环境variables,该variables将用于替代。

启用NuGet软件包还原 在这里输入图像说明

右键点击解决scheme,然后select启用NuGet包还原