【问题标题】:Azure Build Pipeline: Building solution dependencies fails - can't find packages but building csproj dependency files independently works fineAzure Build Pipeline:构建解决方案依赖项失败 - 找不到包,但独立构建 csproj 依赖项文件可以正常工作
【发布时间】:2020-01-26 23:59:41
【问题描述】:

我有一个解决方案,其中包含一堆不同的 api,它们引用了我们在实用程序文件夹中构建的不同依赖项。

在 Azure Devops 中,当我去构建解决方案时,它抱怨它找不到这些依赖项的依赖项并失败。这些依赖项指向解决方案的相同依赖项,这些依赖项位于几个文件夹中;所以依赖 HintPath 是 ../../packages 而不是解决方案的依赖 HintPath ./packages

当我构建独立于解决方案的 csproj 文件(即不将它们构建为解决方案的依赖项)时,它们构建得很好并且找到包文件夹没有问题。 Nuget Restore 没有报告任何问题,并且我们已将包签入到源代码管理中,因此应该不会丢失任何内容。即使有,如果它们丢失,Nuget 也会恢复它们。

所以我在想:当我构建解决方案并尝试在下面构建依赖项时,它会尝试从解决方案目录开始访问包,然后从那里向上(master/../../packages/ 而不是utilities/../../packages/ )。该文件夹不存在,这会导致它失败,并且对于依赖项的各个构建为何起作用是有意义的。

之前有没有人在 Azure Dev Ops 中遇到过这个问题,或者知道如何解决这个问题?

我们可以编辑提示路径以指向 ./ 的依赖项,但我们有一个本地构建,我们仍然用于生产,它不能像那样运行并且会中断。我们正在努力使这些保持同步。

如果您有任何想法,请告诉我。

谢谢

【问题讨论】:

    标签: visual-studio azure msbuild azure-devops nuget


    【解决方案1】:

    对我有用的解决方案是改变 NuGet 包在解决方案中的存储方式。除了使用 packages.config 之外,Visual Studio 中有一个选项可以使用 PackageReference,这是一种为 NuGet 引用包的新方法。在将我们的大多数项目切换到使用 NuGet 的新方式之后,它就能够运行和构建了。

    【讨论】:

      【解决方案2】:

      Azure 构建管道:构建解决方案依赖项失败 - 找不到包但独立构建 csproj 依赖项文件可以正常工作

      要解决此问题,您可以尝试将这些依赖项的依赖项安装到解决方案中。那是因为 NuGet 团队在 NuGet 3.0 中弃用了解决方案级别的包:

      https://github.com/NuGet/Home/issues/522

      因此,我们需要确保默认包文件夹./packages中解决方案的所有使用包,而不是不同的包文件夹。

      如果以上内容对您没有帮助,您可以在问题中分享您的项目结构。

      希望这会有所帮助。

      【讨论】:

      • 感谢您的回复,我试过了,但它仍然会抱怨找不到文件。我将需要编辑每个单独的 csproj 文件 HintPaths 以查看 ./packages,这不是我们为本地内容所做的方式,因此不可能使这两个代码库保持同步。如果我们打开 prem,我们将有很多额外的包文件夹,而不是它们都在查看一个包文件夹源。这只是很多不应该需要的额外文件
      猜你喜欢
      • 1970-01-01
      • 2019-03-15
      • 2016-07-11
      • 2018-02-10
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多