Сбой сборки Azure DevOps после обновления приложения с ASP.NET Core 2.2 до ASP.NET Core 3.1

У меня есть сборка, которая отлично работает локально (VSCode, .NET Core 3.1.101), но выдает следующее сообщение при запуске в конвейере Azure DevOps.

Мой конвейер урезан до самого простого:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

И это приводит к этому сообщению об ошибке:

Для версии 3.1.101 пакета SDK .NET Core требуется версия MSBuild не ниже 16.3.0. Текущая доступная версия MSBuild - 15.9.21.664. Измените пакет SDK .NET Core, указанный в global.json, на более старую версию, для которой требуется доступная в настоящее время версия MSBuild.

Я не могу найти способ изменить версию MSBuild, запускаемую конвейером, и переход на более старую версию .NET Core наверняка побеждает цель обновления?

Есть ли способ создать решение .NET Core 3.1 в Azure DevOps?


person SimonF    schedule 09.02.2020    source источник
comment
можешь опубликовать, как выглядит твоя задача?   -  person Sajeetharan    schedule 09.02.2020
comment
Хорошая точка зрения. Я добавил YAML для шагов сборки, чтобы задать вопрос.   -  person SimonF    schedule 09.02.2020
comment
Изображение windows-2019 с 16.4, но вы имеете в виду 15.9. версия, поэтому кажется, что она связана с вашим проектом, не могли бы вы поделиться с нами образцом, чтобы воспроизвести эту проблему?   -  person Leo Liu-MSFT    schedule 18.02.2020


Ответы (2)


Я не вижу нигде, у вас есть задача сборки dotnet, вам нужно иметь задачу dotnetbuild с настроенной версией,

steps:

    - task: UseDotNet@2 
      displayName: ".NET Core 3.1.x"
      inputs:
        version: '3.1.x'
        packageType: sdk
    - script: dotnet build --configuration $(buildConfiguration)
      displayName: 'dotnet build $(buildConfiguration)'

См. Эту статью.

person Sajeetharan    schedule 10.02.2020
comment
Нет, он все еще не работает Version 3.0.102 of the .NET Core SDK requires at least version 16.3.0 of MSBuild. The current available version of MSBuild is 15.9.21.664. Change the .NET Core SDK specified in global.json to an older version that requires the MSBuild version currently available. - person Pablo; 10.02.2020
comment
Я не думаю, что это связано с лазурным DevOps, я сомневаюсь в чем-то похожем здесь stackoverflow.com/questions/55420731/ - person Sajeetharan; 10.02.2020
comment
Думаю, я понял! stackoverflow.com/a/58168141/1958882 Ну, он построен с некоторыми предупреждениями, но, похоже, работает. - person Pablo; 10.02.2020
comment
Я попробовал это - удалил команды NuGet и заменил их восстановлением dotnet. Этот бит работает, но теперь сборка dotnet выдает ошибку: значение TargetFramework netcoreapp3.1 не распознано. Это может быть неправильно написано. В противном случае свойства TargetFrameworkIdentifier и / или TargetFrameworkVersion должны быть указаны явно. - person SimonF; 11.02.2020
comment
Я удалил определение конвейера, чтобы включить только бит до того места, где он не работает. В оригинале были биты сборки dotnet, но до этого далеко не дошло. - person SimonF; 11.02.2020
comment
@sajeetharan, он отлично работает, когда я создаю его с помощью Visual Studio или VSCode или из командной строки. Он не работает только в Azure DevOps. - person SimonF; 12.02.2020
comment
Это было решено. Я тоже не могу заставить это работать в Azure - person CodeMan03; 04.05.2020
comment
@ CodeMan03 Какой агент вы используете? У меня Ubuntu 18.04 работает ... - person Jonas; 05.05.2020
comment
Использование Visual Studio 2019 - person CodeMan03; 05.05.2020

Вы должны иметь возможность восстанавливать пакеты nuget, компилировать и запускать модульные тесты, используя этот YAML


pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: 'Release'
  rootDirectory: '$(Build.SourcesDirectory)'

steps:

- task: DotNetCoreCLI@2
  displayName: Restore nuget packages
  inputs:
    command: restore
    projects: '**/*.csproj'
    workingDirectory: $(rootDirectory)

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '$(rootDirectory)/*.sln'
    arguments: '--configuration $(buildConfiguration)'

# You just added coverlet.collector to use 'XPlat Code Coverage'
- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true'
    workingDirectory: $(rootDirectory)

Я предполагал, что ваш файл решения находится в корневом каталоге. Если вы используете глобальный json, установите версию sdk на 3.1.201, иначе может потребоваться другой steo.

global.json

{
  "sdk": {
    "version": "3.1.201",
    "rollForward": "latestFeature"
  }
}
person Krzysztof Madej    schedule 05.05.2020