【问题标题】:Bug: Azure DevOps Artifact Feed set wrong Package Dependencies错误:Azure DevOps Artifact Feed 设置错误的包依赖项
【发布时间】:2021-01-21 10:07:45
【问题描述】:

我们在 Azure DevOps Server 2020.1(本地)上使用我们的私有工件源。我收到了一个提要 MyFeed 和一个提要 MyFeedTest. 我使用 MyFeedTest 来暂存我们的 NuGet 包。当它们稳定时,它们会被推送到 MyFeed。如果提要中的 NuGet 包依赖提要中的另一个 NuGet 包,我使用以下行:

<PackageReference Include="ext.lib.MyPackage" Version="*" />

这里的问题是 Azure DevOps 服务器自己确定依赖关系,它从 MyFeedTest 中的暂存包中获取版本,用于 MyFeed 中的包,即使包 MyFeedTest 被取消列出,即使当整个提要MyFeedTest 被删除。

Azure DevOps 工件不应自行确定与另一个包的依赖关系,也不应忽略包项目文件 (Version="*") 中定义的依赖关系设置。

最后,我的同事在 Visual Studio 中得到以下错误:

Azure DevOps 服务器上的包ext.lib.MyPackage 的依赖关系如下:

但要记住,版本13.1.5.3 中的包ext.lib.DevExpress 在删除整个提要MyTestFeed. 后不存在

那我该如何解决呢?是否可以将 Azure DevOps 服务器配置为不这样做?我们不能通过该机制使用暂存。

【问题讨论】:

  • 包的依赖关系由包的引用决定。 Azure Artifacts 不会自动添加或删除依赖项。如果您不再需要 ext.lib.DevExpress 作为依赖项,则需要在 ext.lib.MyPackage 中删除此包引用并重新发布。
  • @WalterQian-MSFT 感谢您的回复。我们从未定义对版本13.1.5.3 的依赖。我们定义了Include="ext.lib.DevExpress" Version="*",这就是我们想要的。 Azure Artifacts 自行将 ext.lib.DevExpress (≥ 13.1.5.3) 包的依赖项设置为 ext.lib.DevExpress (≥ 13.1.5.3),这是我们不想要的。即使在删除 ext.lib.DevExpress 14.1.5.3 所在的提要之后,Azure Artifacts 仍会保留对 ext.lib.DevExpress (≥ 13.1.5.3) 的错误依赖,这是我们真正不想要的。工件将 * 转换为显式版本,这是不正确的,应该修复。

标签: azure-devops


【解决方案1】:

这里的问题是 Azure DevOps 服务器确定 自身依赖

这不是由 Azure DevOps Server 确定的,而是由 NuGet 解决的。 Version="*" 表示最高稳定版本。这是关于Floating version resolutions 的文档。 我使用dotnet CLI 创建 NuGet 包。这是我的示例:

1.在“*.csproj”文件中添加包引用。

<ItemGroup>
  <PackageReference Include="ext.lib.MyPackage" Version="*" />
</ItemGroup>

2.使用dotnet pack命令构建NuGet包。这将生成一个“*.nupkg”文件。将此文件的后缀更改为 zip 和解压缩文件。

3.我们可以找到一个“*.nuspec”文件。用记事本打开这个文件,我们可以看到如下内容:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>ext.lib.DevExpress</id>
    <version>3.2.1</version>
    <authors>ext.lib.DevExpress</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <dependencies>
      <group targetFramework="net5.0">
        <dependency id="ext.lib.MyPackage" version="1.2.3" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
</package>

所以我们可以发现,在这个包被推送到 Azure DevOps 之前,包的依赖已经解析为显式版本,这是预期的行为。

如果您不再需要 ext.lib.DevExpress 作为依赖项,则需要在 ext.lib.MyPackage 中删除此包引用并再次推送您的包。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多