使用带和不带http代理的2个源进行NuGet还原

使用带和不带http代理的2个源进行NuGet还原,nuget,http-proxy,nuget-package-restore,Nuget,Http Proxy,Nuget Package Restore,在我们公司,我们支持HTTP代理,所以我们需要在访问nuget.org时使用它来恢复包 我们还使用一个内部NuGet服务器,在其中发布一些打包为NuGet的共享组件 运行CI build时,我们希望从两个源还原包。有没有办法将NuGet配置为一个而不是另一个使用代理 global nuget.org-使用代理 内部NuGet服务器-不直接使用代理 如果我在NuGet.config中定义了一个http_代理,它将用于两个源,因此内部源会失败。 如果我没有定义它,它将在全局源代码中失败。在vis

在我们公司,我们支持HTTP代理,所以我们需要在访问nuget.org时使用它来恢复包

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

运行CI build时,我们希望从两个源还原包。有没有办法将NuGet配置为一个而不是另一个使用代理

  • global nuget.org-使用代理
  • 内部NuGet服务器-不直接使用代理
如果我在NuGet.config中定义了一个http_代理,它将用于两个源,因此内部源会失败。
如果我没有定义它,它将在全局源代码中失败。

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

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

第一个调用用于带代理的全局源,第二个调用-用于不带代理的本地源。 在第一次运行时,它仍然抱怨没有找到位于本地源代码中的包,所以我忽略了第一次运行的退出代码

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


请记住,此处的语法特定于TeamCity,即使用双百分比符号来括起环境变量,因为单个要引用TeamCity参数。

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

很抱歉,它没有用,我不知道如何设置多个软件包源您使用什么来构建项目以实现持续集成?nvm我已经检查了您的配置文件,我猜您使用的是Jenkins,所以我认为不可能,也许您可以使用power shell NuGet.config编辑以从一个源还原,然后从另一个源还原。是的,这就是我最后做的-运行“nuget.exe restore”两次,将在问题中作为更新发布。为了帮助其他SO人员添加为答案,并将其标记为正确答案。感谢SilentTremor,我会这样做。不过这不是一个理想的解决方案。谢谢你,斯蒂西。是的,对某人来说这可能是正确的方式。我还是尽量避免在我们的动物园里再增加一个工具。
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%%