NuGet 恢复使用 2 个源,有和没有 http 代理

NuGet restore using 2 sources with and without http proxy

我们公司后面是HTTP代理,访问nuget.org恢复包时需要用到它。

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

运行 CI 构建时,我们希望从两个来源恢复包。有什么方法可以将 NuGet 配置为对其中一个使用代理而不对另一个使用代理?

如果我在 NuGet.config 中定义了一个 http_proxy,它将用于两个来源,因此内部来源会失败。 如果我不定义它,它会因全局源而失败。

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

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

第一次调用是针对带代理的全局源,第二次调用是针对不带代理的本地源。 它仍然在第一个 运行 抱怨本地源中找不到的包,所以我忽略了第一个 运行.

的退出代码

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

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,即双百分号用于包围环境变量,因为单个百分号用于引用 TeamCity 参数。

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