Azure DevOps: «rzc generate завершена с кодом 2»

У меня есть проект ASP.NET Core 3.x, созданный и развернутый с использованием Azure DevOps Pipelines. После обновления проекта для использования C # 9.0 - но не ASP.NET Core 5.0 - моя задача dotnet build (DotNetCoreCLI@2) предупреждает:

Неизвестный язык C # версии 9.0.

Ошибка

Сразу после предупреждения задача не выполняется со следующей ошибкой:

## [ошибка] C: \ Program Files \ dotnet \ sdk \ 3.1.404 \ Sdks \ Microsoft.NET.Sdk.Razor \ build \ netstandard2.0 \ Microsoft.NET.Sdk.Razor.CodeGeneration.targets (150,5 ): Ошибка: команда rzc generate завершилась с кодом 2.

Задача

В моей задаче сборки нет ничего особенного, но для полноты:

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

Условия

Стоит отметить, что:

  • Проект отлично строится с использованием dotnet build на моем локальном компьютере.
  • Если я удалю проект ASP.NET Core 3.x, оставив только мои библиотеки классов .NET Core 3.x, все будет построено нормально.
  • Если я заменю задачу DotNetCoreCLI@2 на задачу VSBuild@1, все также будет нормально построено.

Учитывая это, эта проблема возникает только тогда, когда проект соответствует всем из следующих условий:

  • В проекте используется либо Microsoft.NET.Sdk.Web, либо Microsoft.NET.Sdk.Razor SDK.
  • В проекте используется TargetFramework либо netcoreapp3.0, либо netcoreapp3.1.
  • В проекте используется LangVersion из 9.0.
  • Проект построен с использованием DotNetCoreCLI@2 задачи Azure DevOps.
<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>9.0</LangVersion>
  </PropertyGroup>
</Project>

Есть идеи, как решить эту проблему?


person Jeremy Caney    schedule 25.11.2020    source источник


Ответы (2)


У меня была такая же проблема / ошибка, как и у вас, за исключением случаев, когда выполнялась docker build. Все локально построено нормально, но docker build не удалось с теми же двумя ошибками, которые вы упомянули. На основании вашего вашего ответа о .NET 5 я изменил базовый образ докера с:

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

to

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

И docker build теперь работает нормально.

Примечание. Я все еще использую .NET Core 3.1 в базе кода; все, что я сделал, это обновил образ сборки.

person LukeP    schedule 26.01.2021
comment
О, это интересно. В этом есть смысл. Я полагаю, что на рабочей станции разработчика более вероятно, что и .NET Core 3, и .NET 5 могут быть установлены для кого-то, кто работает над таким проектом, но не обязательно на виртуальной машине - будь то через манифест Docker или CI / CD. экземпляр трубопровода. - person Jeremy Caney; 15.05.2021

Проблема кажется в несовместимости компилятора Razor, встроенного в .NET 3.x SDK, и C # 9.0. Эту проблему можно решить, явно добавив задачу 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 в настоящее время.

  • Пакет SDK для .NET 5 все еще может построить проект, несмотря на то, что он является проектом ASP.NET Core 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.

person Jeremy Caney    schedule 25.11.2020
comment
Скажите, пожалуйста, где вы вводите текстовые примеры, которые вы показываете. У меня такая же ошибка, но она указывает на файл .csproj, где я не вижу / не могу понять, что случилось. - person EoRaptor013; 05.04.2021
comment
@ EoRaptor013: этот текст находится в YAML для моего Azure Pipeline. Ошибка может указывать на ваш csproj, поскольку проблема возникнет при сборке. Но основная проблема заключается в том, что .NET 5 должен быть установлен для компиляции проекта ASP.NET Core 3.x - или библиотеки классов Razor с представлениями - с использованием C # 9.0. Если вы не используете Azure Pipelines, просто убедитесь, что .NET 5 установлен на машине, выполняющей сборку. - person Jeremy Caney; 05.04.2021
comment
Спасибо! У меня нет конвейера yaml, так как это прямой локальный веб-проект. Однако я нашел ссылку на Razor в файле csproj. Здесь не используется Razor, поэтому не знаю, почему там была линия. Удалил строчку и все хорошо. - person EoRaptor013; 05.04.2021