【问题标题】:Azure Pipeline not finding packages that are actually already availableAzure Pipeline 未找到实际可用的包
【发布时间】:2021-01-16 06:13:17
【问题描述】:

我有一个包含许多 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>

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

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

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

【问题讨论】:

  • 我有一个猜测。你能重新构建你的项目吗?例如,从您的 git 存储库(具有标准的 Visual Studio git ignore)中创建一个新的克隆,并查看它是否在没有任何错误的情况下构建。我怀疑您的项目中可能有一个未正确包含的 nuget 包。当您在本地工作时,这些东西会被缓存,但您无法确定,直到您进行全新的构建并确保错误不会在本地复制。不是解决方案,而是值得尝试的一步。
  • 嗨@Ivan-Mark Debono,下面的答案是否解决了您的问题?如果没有,请告诉我有关此问题的最新信息吗?
  • 嗨@Ivan-Mark Debono,刚刚检查一下这个问题现在是否仍然阻碍您?这个问题有更新吗?
  • @VitoLiu-MSFT 通过从源代码管理中删除 packages 文件夹并创建我分配给 nuget 还原任务的 nuget.config 解决了这个特殊问题。但是,我仍然不知道如何成功构建多项目解决方案。

标签: visual-studio azure-devops


【解决方案1】:

在azure devops中,会在文件夹路径下找到包的位置,该路径由&lt;HintPath&gt;... &lt;/HintPath>控制。

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

我们可以在Nuget.config 文件中modify the package location definition。使其与HintPath同步,此时恢复的包的位置将与构建时包的位置一致。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2021-03-22
    • 2019-03-14
    • 1970-01-01
    • 2021-02-24
    • 2021-03-20
    • 1970-01-01
    相关资源
    最近更新 更多