【问题标题】:How to configure where NuGet.exe Command Tool line looks for packages如何配置 NuGet.exe 命令行工具行查找包的位置
【发布时间】:2011-09-22 11:49:08
【问题描述】:

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

为了让我们不必检查我们的包文件夹,我们在每个包含 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>

有没有更好的办法?

【问题讨论】:

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


    【解决方案1】:

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

    之后,您只需运行 Enable-PackageRestore 并将 msbuild 目标设置到您的 Visual Studio 项目文件中,这将确保在预构建步骤中获取包,即使在您的构建服务器上,也无需签入任何包。 (不要忘记检查 .nuget 文件夹!)。

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

    干杯, 泽维尔

    【讨论】:

    • 正是我要说的。当您按下 Ctrl+Shift+B 时,它甚至可以在 Visual Studio 内部工作
    • 我试过了,得到了这个错误。 github.com/davidfowl/NuGetPowerTools/issues/8 无法安装 NuGetPowerTools。所以需要另一种方式。我想我可能会浏览 PowerTools 包并手动重新创建步骤。
    • 有人回复了 David Ebbo 的帖子:我为 import-module cmdlet 打开了详细日志记录,发现 NuGetPowerTools.psm1 是有问题的文件。将文件(为空)重新保存为 UTF-8 编码解决了问题。
    【解决方案2】:

    http://blog.davidebbo.comdigitaltrust 的建议下,我终于安装了 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>
      

    这样做的最终结果是,无论何时更改已批准的存储库位置,都必须仅在一个位置更改配置,而不是在每个 csproj 文件中更改。此外,确定该位置的是持续集成服务器管理员,而不是命令行调用中的开发人员。

    【讨论】:

    • 这看起来比使用 nuget 电动工具更加矫枉过正。如果您使用它并且只是更改了查找 nuget.exe 的位置,您可以获得相同的好处..
    • 如果 PowerTools 确实可以正常工作,而无需进入并编辑包含错误编码保存的文件的包,我就不必提出这个解决方案。你签入一个未经测试的包到官方提要花费了我和其他许多人半天的时间。这让我的客户花了很多钱。
    • 我看到很多人抱怨这个错误,但我自己并没有真正重现它。抱歉,您必须经历这些。希望它会尽快修复。
    • 不用担心。如果有帮助,我的机器是 XP 64 位机器。不是一个非常常见的操作系统,但我没有选择这个客户端。
    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2012-01-14
    • 2015-07-30
    • 2016-04-15
    • 1970-01-01
    • 2022-10-18
    相关资源
    最近更新 更多