繁体   English   中英

避免需要将NuGet.exe添加到源代码管理

[英]Prevent needing to add NuGet.exe to source control

一些背景:
我跟着上使用的NuGet不提交包教程取得了一些成功。 通过手动为nuget.targets文件添加<RestorePackages><Import ...>解决此NuGet问题后 ,一切正常。

但是,一旦使用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 ,但这并没有按预期进行(无论是否带有condition属性)。

只是检查:nuget.targets是一个MSBuild文件。 你是对的方式,在:

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

将值更改为true:

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

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

看着那.targets文件,还有另一种方式来做到这一点,如果你既要检查NuGet.exe中,也每次都下载。 关键是:

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

遵循仅设置属性(如果尚未定义)的MSBuild约定,此值默认为解决方案的NuGet.exe本地副本,如果DownloadNuGetExe属性为true ,则下载该属性。 但MSBuild的属性可以通过环境变量覆盖。

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

启用NuGet软件包还原 在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM