msbuild - 忽略 Azure Pipelines 中 .vdproj 项目上的 NuGet 包还原
问题描述
我正在尝试针对包含Visual Studio Installer Project的 .NET Framework 4.7.2 解决方案设置 Azure DevOps 构建管道。我在安装了 Visual Studio 2019 Community 的 Windows Server 2019 VM 上设置了自托管代理。生成管道包含 NuGet 安装程序任务,然后是 NuGet 任务,设置为还原引用的 NuGet 包。以下是 YAML 片段:
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '$(solution)'
但是,使用此配置运行构建会导致构建日志中出现以下错误:
[错误] nuget 命令失败,退出代码 (1) 和错误 (C:\##############.vdproj(1,1): 错误 MSB4025: 项目文件无法已加载。根级别的数据无效。第 1 行,位置 1。)
这似乎是由于在较新版本的 nuget.exe 中进行了性能增强。基于此RestoreUseSkipNonexistentTargets
GitHub 问题的建议是启用使用MSBuild 设置跳过不存在的包目标。
GitHub 问题提到使用NUGET_RESTORE_MSBUILD_ARGS
NuGet CLI 环境变量来设置此属性,但我不知道如何通过 NuGet 构建任务来实现。
由于 NuGet 现在已与 MSBuild 集成,因此我尝试false
通过 NuGet 任务的命令行参数将此属性设置为。我修改了 YAML,将命令设置为custom
以传递参数。我基于MSBuild 还原文档的语法。现在看起来如下:
- task: NuGetCommand@2
inputs:
command: 'custom'
arguments: 'restore "$(solution)" -p:RestoreUseSkipNonexistentTargets=false'
此构建配置会导致以下错误:
[错误] nuget 命令失败,退出代码 (1) 和错误(未知选项:'-p:RestoreUseSkipNonexistentTargets=false')
我的问题是,如何让 NuGet 还原任务跳过 .vdproj 项目的包还原?
编辑
解决方案中的另一个项目是 C# WinForms .NET Framework 项目。我们使用的是 packages.config 而不是 PackageReference。
解决方案
至于你原来的问题:MSB4025
正如你上面提到的,这是一个悬而未决的问题。任何对此感兴趣的人都可以在那里跟踪问题。
[错误] nuget 命令失败,退出代码 (1) 和错误(未知选项:'-p:RestoreUseSkipNonexistentTargets=false')
nuget restore 命令无法识别 msbuild 属性。在此处查看类似问题和更多详细信息。
自从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'
这可以跳过安装程序项目的恢复步骤。
推荐阅读
- xml - 重写多个文件并避免错误 XTRE1500:无法读取在同一转换期间写入的文档
- python - 默认单选按钮在第二个 tkinter 窗口中不起作用
- hibernate - 在 SpringBoot 中加入返回 null 但 MySQL 返回 4 行
- javascript - 在Javascript中用随机元音替换每个元音,用随机辅音替换每个辅音
- php - 如何获取选择 vuejs 的 id 和 v-text
- c++ - 有没有使用 c++ 编写的 GTK+3 中不使用 css 的多行文本字段的示例?
- javascript - Array.find() 正在改变对象?
- three.js - 在顶点着色器中旋转实例
- r - R中是否有一种直接的方法可以将复杂字符串末尾的不同部分提取到多个单独的列中?
- javascript - async / await 彼此内部有多个请求循环