使用和不使用http代理的2个源恢复NuGet

时间:2016-03-18 15:44:03

标签: nuget http-proxy nuget-package-restore

在我们公司,我们支持HTTP代理,因此我们需要在访问nuget.org时使用它来恢复软件包。

我们还使用内部NuGet服务器,我们发布一些打包为NuGet的共享组件。

运行CI构建时,我们希望从两个源恢复包。有没有办法配置NuGet使用代理而不是另一个?

  • global nuget.org - 使用代理
  • 内部NuGet服务器 - 不直接使用代理

如果我在NuGet.config中定义了一个http_proxy,它将用于两个源,因此无法使用内部源。 如果我没有定义它,它将失败并带有全局源。

3 个答案:

答案 0 :(得分:1)

我最终故意两次调用“nuget restore”,作为主要MsBuild解决方案之前CI构建中的一个单独步骤。

第一次调用是针对具有代理的全局源,第二次调用 - 针对没有代理的本地源。 它仍然在第一次运行中抱怨未找到的包存在本地源中的包,所以我忽略了第一次运行的退出代码。

以下是我在CI构建中使用的Windows批处理代码(在TeamCity中):

set NUGET_PATH="%system.SolutionDirectory%\.nuget\NuGet.exe"
set NUGET_GLOBAL=https://www.nuget.org/api/v2/
set NUGET_LOCAL=%teamcity.nuget.feed.server%

echo Restoring from global source with proxy
set http_proxy=%env.http_proxy_global%
%%NUGET_PATH%% restore "%system.SolutionDirectory%\%system.SolutionFile%" -NonInteractive -Source %%NUGET_GLOBAL%%
echo --- Finished with exit code: %%ERRORLEVEL%%

echo Restoring from local source without proxy
set http_proxy=
%%NUGET_PATH%% restore "%system.SolutionDirectory%\%system.SolutionFile%" -NonInteractive -Source %%NUGET_LOCAL%%
echo --- Finished with exit code: %%ERRORLEVEL%%

exit %%ERRORLEVEL%%

请记住,此处的语法特定于TeamCity,即双百分号用于包含env变量,因为单个变量用于引用TeamCity参数。

答案 1 :(得分:0)

在visual studio中,您可以这样做,工具 - > NuGet包管理器 - >包管理器设置 - > NuGet包管理器 - >包来源

答案 2 :(得分:0)

作为替代方案,您可以使用 ProGet 作为NuGet包的唯一来源,因为它可以在本地镜像NuGet.org包源。

相关问题