使用私有软件包suorce在Azure DevOps中构建的点网无法从私有nuget提要还原

时间:2019-09-09 11:56:53

标签: .net-core azure-devops nuget azure-pipelines azure-artifacts

我们的项目在Azure DevOps的私有工件源中引用了程序包。在Azure DevOps中构建项目时,dotnet restore可以很好地完成,但是dotnet build也会尝试还原包并失败

Unable to load the service index for source https://myazdevops.pkgs.visualstudio.com/_packaging/OurPackages/nuget/v3/index.json

解决方法是将--no-restore添加到dotnet builddotnet publish任务中。

是否有某种方法可以在没有参数的情况下开始构建和发布?

3 个答案:

答案 0 :(得分:1)

我认为您的解决方法是解决方案,它在official docs中写道:

  

从.NET Core 2.0 SDK开始,在以下情况下隐式运行dotnet还原:   您运行dotnet build。如果要禁用隐式还原,何时   运行build命令,可以传递--no-restore选项。

除非添加--no-restore,否则您无法禁用此行为。

另请参阅this问题和答案。

答案 1 :(得分:1)

我们已经在Github中打开了源代码,您可以参考dotnet build命令的代码。这是一个编译命令,因此我们没有在任务中创建脚本来额外设置authinfo。另外,如您所知,dotnet restore仅隐式运行,而dotnet build仅在.net core 2.0之后运行。实际上,如果您在dotnet restore之前运行过dotnet restore,则隐式运行的dotnet build并不是必需的部分。这就是为什么我们提供workaround-添加--no-restore-以避免此隐式命令的原因。

这是一个非常方便的方法,可以使您的编译过程非常简洁。但是,如果仍然不希望使用此参数,则需要执行另一项配置工作以使用凭据进行授权。

配置Azure Artifacts Credential Provider,然后使用VSS_NUGET_EXTERNAL_FEED_ENDPOINTS environment variable传递凭据。 VSS_NUGET_EXTERNAL_FEED_ENDPOINTS包含您需要使用JSON格式进行身份验证的任何提要的终结点凭据。

答案 2 :(得分:0)

我的内部NuGet提要也有类似的问题。 我通过在包含NuGet.org和我们内部NuGet存储库的存储库中添加nuget.config文件来解决该问题。

<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="internal" value="URL_TO_INTERNAL_FEED" />
  </packageSources>
</configuration>

然后只需在还原步骤中指定该文件的NuGet.config的路径

希望这会有所帮助。