在我们公司,我们支持HTTP代理,因此我们需要在访问nuget.org时使用它来恢复软件包。
我们还使用内部NuGet服务器,我们发布一些打包为NuGet的共享组件。
运行CI构建时,我们希望从两个源恢复包。有没有办法配置NuGet使用代理而不是另一个?
如果我在NuGet.config中定义了一个http_proxy,它将用于两个源,因此无法使用内部源。 如果我没有定义它,它将失败并带有全局源。
答案 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包源。