来自特定包源的 Nuget 包在 Azure 上的 nuget 还原步骤

Nuget package from specific package source on nuget restore step on Azure

我要恢复的包在 nuget.org3rd party myget 上。第 3 方是我想使用的更高版本(预发布),但是它似乎甚至没有尝试找到这个包的 myget 源,因为它在 nuget.org 上找到包,但不是我想要的版本导致以下错误消息:

##[error]The nuget command failed with exit code(1) and error(Errors in packages.config projects
Unable to find version '2.0.0-dev-00013' of package 'Discord.Addons.Interactive'.
  https://api.nuget.org/v3/index.json: Package 'Discord.Addons.Interactive.2.0.0-dev-00013' is not found on source 'https://api.nuget.org/v3/index.json'.)

myget 在我的 nuget.config 中正确配置,它在我的解决方案根目录中

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Foxbot" value="https://www.myget.org/F/foxbot-discord-addons/api/v3/index.json" />
  </packageSources>
</configuration>

我将如何使 nuget 还原步骤尊重此包的 myget 包源?

资源不再有优先级,最快的为准。

包在 ID 和版本上应该是唯一的,不支持 Feed 包含相同 id/version 的不同变体的情况。

优先顺序导致性能问题,因为对源的调用是顺序的而不是并行的。我建议您使用以下方法解决此问题:

  • 避免使用相同 id/version 的不同包,或者通过使用已经解决的单个 feed 预先协调这些问题。
  • 在自定义提要源中添加一个prefix/suffix

如果仍然需要优先级,你可以像下面这样: 进行如下配置:

  <packageSources>
        <!-- Internal package source comes before NuGet.org proxy -->   
        <add key="my_private_feed" value="Feed1/" priority="1" />
        <add key="Orgnugetorg" value="https://www.nuget.org/api/v2/" priority="2" />
    </packageSources> 

需要调整**PackageDownloader**,如果包源有不同的优先级,他等待最高优先级的下载,否则最快的获胜,

但请注意,这需要更改管道中的 Packagedownloader。

附加参考:

https://github.com/NuGet/Home/issues/5611

NuGet packageSources priority

希望对您有所帮助。

How would I go about making the nuget restore step respect the myget package source for this package?

对于 nuget restore 任务,有一个选项用于控制在包还原期间使用哪些提要。

查看要使用的提要

不同于在本地恢复包,解决方案目录(Devops Repos)中的nuget.config文件直到我们检查 Feeds in my Nuget.config 选项。

所以在那个过程中,nuget 实际上没有为 package source 使用你的 nuget.config 文件,这导致了这个问题:

解决方法:

像下面这样在我的 Nuget.config 中配置 Feed 以确保 nuget 将使用解决方案目录中的 Nuget.config 文件:

另外:如果您使用yaml format而不是经典格式,您应该设置feedsToUse: 'config'nugetConfigPath: 'path/NuGet.config'