Azure DevOps:“rzc generate exited with code 2”

Azure DevOps: “rzc generate exited with code 2”

我有一个 ASP.NET 核心 3.x 项目,它是使用 Azure DevOps Pipelines 构建和部署的。将项目升级为使用 C# 9.0 之后——但 不是 ASP.NET Core 5.0——我的 dotnet build (DotNetCoreCLI@2) 任务警告:

Unknown C# language version 9.0.

错误

警告后,任务立即失败并出现以下错误:

##[error]C:\Program Files\dotnet\sdk.1.404\Sdks\Microsoft.NET.Sdk.Razor\build\netstandard2.0\Microsoft.NET.Sdk.Razor.CodeGeneration.targets(150,5): Error : rzc generate exited with code 2.

任务

我的构建任务没有什么特别的,但为了完整起见:

- task: DotNetCoreCLI@2
  displayName: 'dotnet build'
  inputs:
    projects: '*.sln'
    arguments: '/p:configuration=$(BuildConfiguration) --no-restore'

条件

值得注意的是:

鉴于此,仅当项目满足以下条件所有时才会出现此问题:

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>9.0</LangVersion>
  </PropertyGroup>
</Project>

知道如何解决这个问题吗?

此问题并非特定于 Azure DevOps Pipelines。相反,问题似乎是由于 .NET 3.x SDK 中内置的 Razor 编译器与 C# 9.0 之间的不兼容造成的。这 需要 .NET 5.x SDK 的可用性,以便使用 Razor 视图和 C# 9.0 编译项目——即使该项目本身是 .NET 3.x 项目。

Azure DevOps 管道

由于此问题专门针对 Azure DevOps Pipelines,因此可以通过将 Use .NET Core SDK 任务显式添加到您的管道并使用 .NET 5.x SDK:

- task: UseDotNet@2
  displayName: 'Use .NET Core SDK 5.x'
  inputs:
    version: 5.x
    includePreviewVersions: true

备注

  • 即使 .NET 5 发布了,您仍然必须当前设置 includePreviewVersions

  • .NET 5 SDK 仍然可以构建项目,尽管它是一个 ASP.NET 核心 3.x 项目。

  • 管道中的其他任务(例如 gitversion,在我的例子中)可能明确依赖于 .NET Core 3.x SDK;如果是这样,您还需要安装它:

    steps:
    - task: UseDotNet@2
      displayName: 'Use .NET Core SDK 3.x'
      inputs:
        version: 3.x
    

如果您已将项目升级为使用 .NET 5.0 和 ASP.NET Core 5.0,此步骤可能很明显,但如果您仍在使用 .NET 3.x 和只升级到 C# 9.0——事实上,如果你的 .NET 项目不需要编译 Razor,它仍然没有必要。

我有和你一样的 issue/error,除了做 docker build 的时候。一切都在本地构建良好,但 docker build 因您提到的两个相同错误而失败。基于你 ,我更改了 docker 基本图像:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS backend

现在 docker build 工作正常。

Note: I'm still using .NET Core 3.1 in the code base; all I did was upgrade the build image.