忽略 Azure Pipelines 中 .vdproj 项目的 NuGet 包还原

2024-03-05

我正在尝试针对 .NET Framework 4.7.2 解决方案设置 Azure DevOps 构建管道,该解决方案包含Visual Studio 安装程序项目 https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2017InstallerProjects。我已在 Windows Server 2019 VM 上设置了自托管代理,该 VM 安装了 Visual Studio 2019 Community。构建管道包含 NuGet 安装程序任务,后跟 NuGet 任务,设置用于恢复引用的 NuGet 包。下面是 YAML 片段:

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '$(solution)'

但是,使用此配置运行构建会导致构建日志中出现以下错误:

[错误]nuget 命令失败,退出代码(1) 和错误(C:\##############.vdproj(1,1): 错误 MSB4025: 项目文件无法已加载。根级别的数据无效。第 1 行,位置 1。)

这似乎是由于新版本的 nuget.exe 中的性能增强所致。该建议基于this https://github.com/NuGet/Home/issues/7796#issuecomment-465369065GitHub 问题,是使用以下命令跳过不存在的包目标RestoreUseSkipNonexistentTargetsMSBuild 设置。

GitHub 问题提到使用NUGET_RESTORE_MSBUILD_ARGS NuGet CLI 环境变量 https://learn.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-environment-variables为了设置这个属性,但我不知道如何通过NuGet构建任务来实现这一点。

由于 NuGet 现在已与 MSBuild 集成,因此我尝试将此属性设置为false通过 NuGet 任务上的命令行参数。我修改了 YAML,将命令设置为custom为了传递参数。我的语法基于MSBuild 恢复文档 https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#restore-properties。现在看起来如下:

- task: NuGetCommand@2
  inputs:
    command: 'custom'
    arguments: 'restore "$(solution)" -p:RestoreUseSkipNonexistentTargets=false'

此构建配置会导致以下错误:

[错误]nuget 命令失败,退出代码(1) 和错误(未知选项:'-p:RestoreUseSkipNonexistentTargets=false')

我的问题是,如何让 NuGet 恢复任务跳过 .vdproj 项目上的包恢复?

EDIT

该解决方案中的另一个项目是 C# WinForms .NET Framework 项目。我们使用packages.config 而不是PackageReference。


至于你原来的问题:MSB4025

正如您上面提到的,这是一个悬而未决的问题here https://github.com/NuGet/Home/issues/7796。任何对此感兴趣的人都可以在那里跟踪该问题。

[错误]nuget 命令失败,退出代码(1) 和错误(未知 选项:'-p:RestoreUseSkipNonexistentTargets=false')

nuget Restore 命令无法识别 msbuild 属性。查看类似问题和更多详细信息here https://stackoverflow.com/questions/59166166/getting-nu1202-error-when-running-nuget-restore/59169495#59169495.

Since The other project in the solution is a C# WinForms .NET Framework project. We're using packages.config rather than PackageReference.

解决此问题的方法是使用 nuget 自定义命令,如下所示:

- task: NuGetCommand@2
  inputs:
    command: 'custom'
    arguments: 'restore YourProjectName\packages.config -PackagesDirectory $(Build.SourcesDirectory)\packages'

这可以跳过安装程序项目的恢复步骤。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

忽略 Azure Pipelines 中 .vdproj 项目的 NuGet 包还原 的相关文章

随机推荐