首页 > 解决方案 > 错误:Azure DevOps Artifact Feed 设置错误的包依赖项

问题描述

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

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

这里的问题是,Azure DevOps 服务器自己确定依赖关系,并且即使包被取消列出,即使整个源被删除,它也会从暂存包中MyFeedTest获取包中的版本。MyFeedMyFeedTestMyFeedTest

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

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

在此处输入图像描述

ext.lib.MyPackageAzure DevOps 服务器上的包的依赖项如下所示:

在此处输入图像描述

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

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

标签: azure-devops

解决方案


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

这不是由 Azure DevOps Server 确定的,而是由 NuGet 解决的。Version="*" 表示最高稳定版本。这是有关浮动版本分辨率的文档。我使用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 中删除此包引用并再次推送您的包。


推荐阅读