忽略Azure管道中.vdproj项目上的NuGet程序包还原

问题描述 投票:0回答:1

我正在尝试针对包含Visual Studio Installer Project的.NET Framework 4.7.2解决方案设置Azure DevOps构建管道。我已经在安装了Visual Studio 2019社区的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的较新版本中进行了性能增强。基于this GitHub问题的建议是使用RestoreUseSkipNonexistentTargets MSBuild设置启用跳过不存在的包目标。

[GitHub问题提到使用NUGET_RESTORE_MSBUILD_ARGS NuGet CLI environment variable来设置此属性,但我不知道如何通过NuGet构建任务来实现。

由于NuGet现在已与MSBuild集成在一起,因此我尝试通过NuGet任务上的命令行参数将此属性设置为false。我修改了YAML,将命令设置为custom以传递参数。我基于MSBuild restore documentation的语法。现在看起来如下:

- 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。

msbuild azure-devops nuget azure-pipelines nuget-package-restore
1个回答
0
投票

关于您的原始问题:MSB4025

如上所述,这是一个未解决的问题here。任何对此感兴趣的人都可以在那里追踪问题。

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

nuget restore命令将无法识别msbuild属性。请参见类似的问题和更多详细信息here

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'

这可以跳过安装程序项目的还原步骤。

© www.soinside.com 2019 - 2024. All rights reserved.