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

时间:2012-08-18 20:49:11

标签: visual-studio version-control nuget

某些背景信息:
我跟着tutorial on using NuGet without committing packages取得了一些成功。通过为nuget.targets文件手动添加<RestorePackages><Import ...>来解决this NuGet issue后,一切正常。

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

  

无法找到'C:\ ... \ Visual Studio 2010 \ Projects \ MyProject \ .nuget \ nuget.exe'

这是有道理的,因为我的忽略模式阻止我检查exe文件。从this related SO question我推断出这个文件在版本控制中是不常见的(或者是吗?),但实际上我不想将NuGet.exe提交到版本控制如果我可以帮助它。


问题: 是否有方便的方法来阻止需要检入NuGet.exe?


我尝试了一些谷歌,浏览文档,摆弄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,但这没有按预期工作(有或没有条件属性)。

3 个答案:

答案 0 :(得分:120)

刚刚检查过:nuget.targets是一个msbuild文件。你是在正确的方式,在:

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

将值更改为true:

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

但您必须重新启动Visual Studio或重新加载解决方案(请参阅注释),然后才能生效。

答案 1 :(得分:12)

查看该.targets文件,如果您既不想检查NuGet.exe,也不想每次都下载它,还有另一种方法可以执行此操作。关键是:

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

遵循仅在尚未定义属性的情况下设置属性的MSBuild约定,此值默认为解决方案的NuGet.exe本地副本,如果DownloadNuGetExe属性为true则将其下载}。但是环境变量可以覆盖MSBuild属性。

如果您已将NuGet下载到某个中心位置,则可以将DownloadNuGetExe保留在false并定义一个名为NUGETEXEPATH的环境变量,该变量将替代使用。

答案 2 :(得分:-1)

启用NuGet包还原 enter image description here

右键单击解决方案,然后选择启用NuGet包还原

相关问题