【问题标题】:Azure Devops Build - Want to fail when specific nuget package version does not existAzure Devops Build - 当特定的 nuget 包版本不存在时想要失败
【发布时间】:2021-11-09 21:12:48
【问题描述】:

我们使用 Azure Devops 进行构建。我们为我们的解决方案提供了各种 nuget 包。目前,当我们指定的版本不存在时,nuget restore 只会拉取下一个现有版本,但我们希望构建失败并且不会拉取下一个现有版本。

例如,我们指定 v1.0,如果它不存在,我们希望整个构建失败而不是拉取 v1.1。有没有办法做到这一点?谢谢。

【问题讨论】:

    标签: azure-devops nuget


    【解决方案1】:

    您应该将您引用的软件包版本包含在您的 csproj 文件中的方括号中,如下所示:

    <PackageReference Include="ExamplePackage" Version="[1.0]" />
    

    有关更多详细信息和其他选项,请参阅the docs

    【讨论】:

    • 非常感谢您的回答!
    【解决方案2】:

    正如另一个答案所说,您可以使用 NuGet 的语法进行精确的版本匹配,而不是“大于或等于”。 This is documented。这仅适用于项目中直接包含的包。它不适用于传递依赖。

    根据您的用例,另一种选择是注意 NuGet 在请求的版本不存在时会向您发出警告,而是使用更高的版本。然后,告诉 NuGet 将此警告视为错误:

    <WarningsAsErrors>$(WarningsAsErrors);NU1603</WarningsAsErrors>
    

    这样做的一个好处是您可以将它放在您的 repo 根目录中的 Directory.Build.props 中,并且解决方案中的所有项目都将获得此行为。

    这也适用于传递依赖。但是由于这个原因,如果有一个包你无法控制谁最终声明了一个不存在的依赖项,那么最好的选择可能是将缺少的依赖项声明为直接包引用,并将版本更改为存在的版本( NuGet 的“最近获胜”规则)。或者,也许添加一个特定于包的 NoWarn 可能会起作用:

    <PackageReference Include="Newtonsoft.Json" Version="13.0.0" NoWarn="NU1603" />
    

    【讨论】:

    • 非常感谢!我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多