防止需要将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下载到某个中央位置,则可以将DownloadNuGetExe
为false
并定义一个名为NUGETEXEPATH
的环境variables,该variables将用于替代。
启用NuGet软件包还原
右键点击解决scheme,然后select启用NuGet包还原