一些上下文:
我已经按照使用 NuGet 的教程进行操作,但没有成功提交包。通过手动添加和为 nuget.targets 文件解决此 NuGet 问题后,一切正常。<RestorePackages>
<Import ...>
但是,一旦我使用 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
,但这并没有按预期工作(有或没有条件属性)。