我正在尝试针对 .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 问题,是使用以下命令跳过不存在的包目标RestoreUseSkipNonexistentTargets
MSBuild 设置。
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。