Почему msbuild.exe отсутствует в C: \ Program Files \ dotnet \ sdk \ 3.1.201? Причина сбоя на этапе сборки AzureDevOps - PullRequest
0 голосов
/ 07 мая 2020

У меня есть очень простой проект WPF (. Net 4.7.2) и проект модульного теста (MSTest. Net Core), и я пытаюсь заставить его встроить Azure конвейеры, и я появляется следующая ошибка:

2020-05-07T16: 41: 52.9562570Z C: \ Program Files \ dotnet \ sdk \ 3.1.201 \ Microsoft.Common.CurrentVersion.targets (3032,5 ): ошибка MSB4216: не удалось запустить задачу «GenerateResource», поскольку MSBuild не смог создать или подключиться к узлу задачи со средой выполнения «CLR4» и архитектурой «x86». Убедитесь, что (1) запрошенная среда выполнения и / или архитектура доступны на компьютере, и (2) что требуемый исполняемый файл «C: \ Program Files \ dotnet \ sdk \ 3.1.201 \ MSBuild.exe» существует и можно запустить. [C: \ agent_work \ 4 \ s \ RsSolution4 \ WpfApp1 \ WpfApp1.csproj] 2020-05-07T16: 41: 53.1174401Z ## [ошибка] Ошибка: процесс 'C: \ Program Files \ dotnet \ do tnet .exe 'не удалось с кодом выхода 1

Я искал msbuild.exe в предложенной папке и, конечно же, его не существует. Путь существует, и в папке много файлов, только не msbuild.exe. Там есть msbuild.dll.

Вот мой yaml-файл:

trigger:
- master

pool: 
  name: Default
  demands: msbuild

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

steps:
- task: DotNetCoreCLI@2
  displayName: Restore NuGet
  inputs:
    command: 'custom'
    projects: '**/*.csproj'
    custom: 'restore'

- task: MSBuild@1
  inputs:
    solution: '**/*.sln'
    msbuildLocationMethod: 'location'
    msbuildLocation: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe'
    configuration: 'Release'    
    clean: true

- task: DotNetCoreCLI@2
  displayName: SSP Automated Testing
  inputs:
    command: 'test'
    projects: '**/*Test*.csproj'
    arguments: '--configuration $(buildConfiguration)'
    testRunTitle: 'SSP Testing'

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Похоже, это известная проблема для ядра do tnet. Он сказал On .NET Core, MSBuild doesn't support task hosts of different architectures/runtime versions.

Предоставленный обходной путь - добавить CurrentArchitecture/CurrentRuntime к PropertyGroup . См. Эту аналогичную проблему .

 <PropertyGroup Condition="'$(MSBuildRuntimeType)' == 'Core' Or '$(TargetFrameworkIdentifier)' != '.NETFramework'">
    <GenerateResourceMSBuildArchitecture Condition=" '$(GenerateResourceMSBuildArchitecture)' == '' ">CurrentArchitecture</GenerateResourceMSBuildArchitecture>
    <GenerateResourceMSBuildRuntime Condition=" '$(GenerateResourceMSBuildRuntime)' == '' ">CurrentRuntime</GenerateResourceMSBuildRuntime>
  </PropertyGroup> 

Вы также пытаетесь использовать задачу msbuild только для сборки всех ваших проектов, поскольку msbuild работает как для. net framework, так и для. net core. Вы можете указать solutions и projects для параметра solution задачи Msbuild .

Поскольку в вашем решении есть. Net проекты фреймворка и. Net основные проекты. Я бы предложил использовать задачу восстановления Nuget для восстановления решения. Do tnet cli не работает должным образом с. NET Framework, что, вероятно, не сможет восстановить проекты. net framework.

Надеюсь, что это поможет!

1 голос
/ 07 мая 2020

убедитесь, что вы добавили задачу UseDotNet, чтобы гарантировать, что правильная версия SDK доступна на агенте:

- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '3.1.201'

И я бы предпочел использовать задачу dotnet build для сборки . NET Основной проект и VisualStudioBuild задача для проекта WPF, таким образом вы не будете смешивать типы фреймворков и SDK в одной и той же сборке решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...