如何配置NuGet.exe命令工具行查找包的位置

时间:2011-09-22 11:49:09

标签: continuous-integration nuget nuget-package nuget-server

我们已成功使用NuGet.Server软件包设置了几个本地软件包存储库,并将它们托管在本地IIS网络服务器上。我们能够从包管理器连接并安装没有问题。所以这些工作正常。

为了让我们不必检查我们的packages文件夹,我们在每个包含NuGet引用的项目文件中包含以下命令行。如果NuGet.exe位于CI构建代理程序的路径中,则此方法有效。

但是,我想在每个项目文件中将命令行的源配置移动到一个地方,最好是其他讨厌的开发人员无法改变的地方;)

<Target Name="BeforeBuild">
    <Exec Command="nuget install $(ProjectDir)packages.config -s 
       http://domain:80/DataServices/Packages.svc/;
        http://domain:81/DataServices/Packages.svc/ 
       -o $(SolutionDir)packages" />
</Target>

有更好的方法吗?

2 个答案:

答案 0 :(得分:13)

是的;-) 看看NuGetPowerTools。运行Install-Package NuGetPowerTools后,它会在$(SolutionDir)中添加一个.nuget文件夹,其中包含nuget.exe,nuget msbuild目标和设置(您需要签入)。

之后,您只需运行Enable-PackageRestore,它就会将msbuild目标设置到您的visual studio项目文件中,这将确保在预构建步骤中获取包,甚至在构建服务器上,而无需检入任何包。 (不要忘记检查.nuget文件夹!)。

这样,您只需在解决方案中心的nuget msbuild设置文件(位于.nuget文件夹中)管理nuget包源,而不是在每个项目中。

干杯, 泽维尔

答案 1 :(得分:5)

我终于根据来自http://blog.davidebbo.com

的digitaltrust的建议安装了NuGetPowerTools

尽管NuGetPowerTools解决了我的问题,但对于我想要的东西来说却太过分了。它要求您签入版本控制它在解决方案根目录中创建的.nuget文件夹。该文件夹包含NuGet.exe和几个目标文件。我不喜欢这个,因为我认为版本控制是针对源代码而不是工具。

我提出了以下解决方案。

  1. 将NuGet.exe保存到本地驱动器上的文件夹中,包括开发和持续集成计算机上的文件夹。我选择了C:\ tools \ nuget \
  2. 将该文件路径添加到所有环境中的路径环境变量
  3. 在持续集成计算机上,找到%APPDATA%\ NuGet \ NuGet.Config并输入以下内容

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <packageSources>
        <add key="LocalRepositoryName" value="http://Domain/DataServices/Packages.svc/" /> 
    </packageSources> 
    

    您可以向packageSources添加多个条目,NuGet将按照它们出现的顺序搜索它们

  4. 现在可以将我的问题中的后构建代码修改为以下内容。

    <Target Name="BeforeBuild">
        <Exec Command="nuget install $(ProjectDir)packages.config 
        -o $(SolutionDir)packages" />
    </Target>
    
  5. 最终结果是,无论何时更改批准的存储库位置,都必须仅在一个位置而不是在每个csproj文件中更改配置。此外,是持续集成服务器管理员确定位置,而不是命令行调用中的开发人员。