【问题标题】:Nuget not installing in Azure DevOps buildNuget 未在 Azure DevOps 构建中安装
【发布时间】:2020-01-14 10:29:43
【问题描述】:

我正在尝试停止将来自 Nuget 包的任何内容归档到代码源存储库中。对于大多数人来说,因为他们只有 dll,所以它可以工作。 我的问题是我在 nupkg 中有一个带有 Content 文件夹的 Nuget。使用 VS2017 构建时,一切都正确安装,但是使用构建服务器(Azure DevOps Pipeline)做同样的事情时,我得到了

Error MSB3030: Could not copy the file "....." because it was not found.

根据 Capabilities,管道代理版本为 v.2.122.1。 NuGet Task 使用 NuGet 3.3.0.212 和 MsBuild 14.0 记录版本 0.2.31。

我在 packages 文件夹中看到了 nupkg 文件,但 Content 文件夹中的项目没有被复制。

我需要向我的 csproj 添加什么特别的东西,或者我应该向我的构建定义添加任何其他步骤吗?

【问题讨论】:

  • 请阅读this。您是否在 Visual Studio 构建步骤中使用了已弃用的还原 NuGet 包复选框?
  • “不幸的是”,我不使用它。这就像 nuget restore 任务只恢复 nupkg 但不安装它......

标签: build msbuild azure-devops nuget nuget-package-restore


【解决方案1】:

我需要向我的 csproj 添加什么特别的东西,或者我应该向我的构建定义添加任何其他步骤吗?

您需要更改您的 csproj 文件以链接内容包中的文件,而不是将文件添加到项目中。由于您试图停止将来自 Nuget 包的任何内容归档到代码源存储库中,因此请在构建定义中添加 nuget restore 任务。

作为测试,我创建了一个内容包并添加了一个复制事件以从内容包中复制文件:

安装该软件包后,以下内容将添加到项目文件.csprojpackages.config

.csproj:

  <ItemGroup>
    <Content Include="resources\Test.txt" />
    <Content Include="resources\Test2.txt" />
  </ItemGroup>

Packages.config:

<packages>
  <package id="TestContentPackage" version="1.0.0" targetFramework="net461" />
</packages>

然后我们更改.csproj文件以链接内容包中的文件:

  <ItemGroup>
    <Content Include="..\Packages\TestContentPackage.1.0.0\content\resources\Test.txt" />
    <Content Include="..\Packages\TestContentPackage.1.0.0\content\resources\Test2.txt" />
  </ItemGroup>

更改后,内容包中的文件不会添加到项目中,只是链接到项目:

为了验证复制命令,我在构建事件中添加了以下复制命令:

if not exist $(ProjectDir)TestFolder  mkdir $(ProjectDir)TestFolder
xcopy /y "$(SolutionDir)Packages\TestContentPackage.1.0.0\content\resources\Test2.txt" "$(ProjectDir)TestFolder"

所有的东西都在我的本地运行良好。

然后我用 Azure devops 构建这个项目,你需要添加 nuget restore 任务,否则 Visual Studio/MSBuild 无法从包中找到文件。它也可以正常工作。

注意:如果要从内容文件夹中复制文件,则需要从packages 文件夹中复制。

希望这会有所帮助。

【讨论】:

  • 虽然这肯定会奏效,但它错过了 NuGet 的要点,它应该自动在正确的位置部署正确的东西。这样做可能意味着每次更新 NuGet 或添加/删除 NuGet 时都必须这样做),因此无法使用。既然你在 NuGet 团队工作,你能帮我理解为什么 VS 可以正确还原和安装/部署 NuGet,但不能正确还原和安装/部署 Azure Pipeline Task?
  • @bkqc,抱歉回复晚了。不同之处在于您试图停止归档到代码源存储库中。由于 nupkg 中带有 Content 文件夹的 Nuget 会将文件添加到项目中,该文件将添加到源代码管理中。这不是你想要的。所以,我给你这个解决方法。如果您希望 VS 和 Azure devops 具有相同的行为,则必须将内容文件添加到源代码管理。
  • 感谢您的回复。不幸的是,这似乎是唯一的选择,因此,我将其标记为答案。另一方面,不使用 Nuget 内容是没有意义的。我知道存储库中的文件应该优先于 Nuget,但这并不妨碍 Pipeline 完成完整的工作。我可以在哪里提交功能请求?
猜你喜欢
  • 2021-02-23
  • 2019-08-17
  • 1970-01-01
  • 2021-01-07
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
相关资源
最近更新 更多