Microsoft.NET.Sdk.CrossTargeting.targets 上的 Visual Studio Build in Azure DevOps 管道错误

Posted

技术标签:

【中文标题】Microsoft.NET.Sdk.CrossTargeting.targets 上的 Visual Studio Build in Azure DevOps 管道错误【英文标题】:Visual Studio Build in Azure DevOps pipeline errors on Microsoft.NET.Sdk.CrossTargeting.targets 【发布时间】:2020-03-27 00:32:21 【问题描述】:

我正处于将代码库从 .NET Framework 迁移到 .NET Standard 的早期阶段。我正在将我的解决方案中的一些基础项目转换为具有 net462 和 netstandard2.0 目标框架的 SDK 项目类型。

我所有的应用程序和服务仍然是 .NET Framework。

为了澄清,我有一个针对这两个框架的库项目,然后是具有多目标项目作为参考的其他库项目(仅限 .NET Framework),然后是引用所有框架的应用程序(仅限 .NET Framework)以上。

当我在 Visual Studio 2019 中编译我的解决方案时,它编译得很好。如果我进行手动发布,那也可以。但是,当我尝试对 Azure DevOps 进行 PR 时,我的 CI 构建管道错误并出现此错误:

[错误]C:\Program Files\dotnet\sdk\3.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CrossTargeting.targets(27,5):错误:“发布' 不指定目标框架不支持目标。当前项目面向多个框架,请为发布的应用指定框架。

Google 建议,如果我使用的是 dotnet -publish,我需要提供一个框架参数。但是 VSBuild 任务似乎不支持这一点。

我的管道的相关 YAML 是:

steps:
- task: VSBuild@1
  displayName: 'Check for Build Errors'
  inputs:
    solution: '$(SolutionName)'
    msbuildArgs: '/target:publish'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    maximumCpuCount: true

还有想法或澄清问题?

【问题讨论】:

【参考方案1】:

msbuildArgs 中为目标框架指定 MSBuild 参数是否会为您提供所需的结果?

    msbuildArgs: '/target:publish /p:TargetFramework=net462'

dotnet msbuild 命令的reference 表示支持相同的 MSBuild 参数,并引导您(以迂回的方式?)here,您可以在其中看到用于不同目标框架的名字对象。

【讨论】:

仅供参考,对于DotNetCoreCLI@2“发布”命令(在其arguments,即arguments: '/p:TargetFramework=net462' )中,同样的论点可能成立 添加 TargetFramework 参数并没有修复错误 也许您正在针对解决方案文件 (sln) 发布,而不是在项目级别发布(不清楚您的管道的 $(SolutionName) 引用的是什么)。见问题评论here 我绝对是针对解决方案发布的(这样我们就不必在每次向解决方案中添加项目时都更改管道) 嗯,很糟糕,但完全明白了。链接问题中的next comment(从去年 2 月开始)看起来与您的困境相似。我建议您将自己添加到该列表中,看看是否可以对解决方案(没有双关语)产生任何影响。

以上是关于Microsoft.NET.Sdk.CrossTargeting.targets 上的 Visual Studio Build in Azure DevOps 管道错误的主要内容,如果未能解决你的问题,请参考以下文章