最佳答案
一些背景:
我跟踪 使用不提交包的 NuGet 教程取得了一些成功。通过手动为 nuget.target 文件添加 <RestorePackages>
和 <Import ...>
绕过 NuGet 的问题之后,一切正常。
但是,在使用 Mercurial 克隆了存储库之后,在构建时出现了以下错误:
无法定位“ C: ... Visual Studio 2010 Projects MyProject. nuget nuget.exe”
这是有道理的,因为忽略模式阻止我检入 exe 文件。从 这个相关的 SO 问题我推断,在版本控制中使用这个文件并不罕见(真的是这样吗?),但真的,我想 不要将 NuGet.exe 提交到版本控制,如果我能帮助它。
问题: 是否有一种方便的方法来避免需要检入 NuGet.exe?
我尝试了一些 Google-fu,浏览了一下文档,修改了一下 NuGet.target 文件,到目前为止还没有什么进展。如果我能够动态地指向构建解决方案的特定环境的 NuGet.exe,似乎会更好。
我知道我可以只添加 exe 文件,但我想知道是否有其他方法来处理这个问题,或者知道为什么没有可行的替代方案。
更新:
Target 文件包含一些相关的 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>
我不熟悉。目标文件,但这似乎符合我要找的东西。我戴上牛仔编码帽子,试着在 DownloadNuGetExe 元素中将 false
改为 true
,但是这并不能如预期的那样工作(不管是否带条件属性)。