首页 > 解决方案 > Azure Pipeline 未找到实际可用的包

问题描述

我有一个包含许多 nuget 包的项目。System.Net.Http.Extensions.其中一次是csproj包含此参考:

<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
</Reference>

在我的本地机器上构建显然有效。包文件夹包含在我的仓库中。

具有自托管代理的 Azure 管道不会生成说缺少程序集。所有包都已在代理中成功还原,并且该包也可以在packages文件夹中找到。

那么我在这里错过了什么?

标签: visual-studioazure-devops

解决方案


在 azure devops 中,它会在文件夹路径下找到包位置,该路径由<HintPath>... </HintPath> 控制。

正常情况下,它的默认位置应该是<HintPath>..\packages\...</HintPath>,这与定义的默认位置相同Nuget.config。我假设它的本地 repos 路径应该永远改变,那么它HintPath在文件中定义的路径csproj也会自动改变。但是,在 Nuget.config 中,它的包默认位置仍然保持默认。这将导致包还原时,它遵循Nuget.config. 但是在构建期间,由于它会查找带有csproj... 定义的包,因此构建无法知道实际包恢复的位置。然后导致这些错误信息。

我们可以修改文件中的包位置定义Nuget.config。使其与 同步HintPath,此时恢复的包的位置将与构建时包的位置相同。

将以下脚本添加到 Nuget.config 文件中:

<configuration>
  <config>
    <add key="repositoryPath" value="xxxx" />
  </config>
  ... 
</configuration>

推荐阅读