Как скомпилировать полный.NET вместе с проектом NETStandard

#.net #visual-studio #msbuild #asp.net-web-api2 #.net-5

#.net #visual-studio #msbuild #asp.net-web-api2 #.net-5

Вопрос:

У меня есть полный проект .NET 4.7.2 Web API. Это существующий проект. На сервере CI я создаю этот проект, используя версию MSBuild 15.6.85.37198 из C:Program Files (x86)Microsoft Visual Studio2017BuildToolsMSBuild15.0Binmsbuild папки

Я добавил еще NETStandard2 один проект библиотеки, который имеет общий код. Проект Web API 2 теперь имеет ссылку на этот проект NETStandard2.

Также обновлена конфигурация веб-Api как

 <system.web>
    <compilation targetFramework="4.7.2" debug="true">
      <assemblies>
        <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.7.2" />
 

На локальном компьютере я использую VS 2019, и оба проекта компилируются.

На сервере CI я установил новый NET 5 SDK. Я создаю веб-проект как

C:Program Файлы (x86) Microsoft Visual Studio 2017 BuildTools MSBuild 15.0 Bin msbuild MyAPI.csproj /p:Конфигурация = Выпуск

Его ошибка

ошибка: для версии 5.0.101 .NET Core SDK требуется как минимум версия 16.8.0 MSBuild. Текущая доступная версия MSBuild — 15.6.85.37198. Измените пакет SDK .NET Core, указанный в global.json, на более старую версию, для которой требуется доступная в настоящее время версия MSBuild.

Ошибка не требует пояснений. Поскольку веб-api ссылается на NetStandard, я должен установить MSBuild 16*

Однако из документации MS

Чтобы установить MSBuild в системе, в которой нет Visual Studio, перейдите в раздел Загрузки Visual Studio и прокрутите вниз до всех загрузок, затем разверните «Инструменты для Visual Studio 2019». Установите инструменты сборки для Visual Studio 2019, которые включают MSBuild, или установите .NET Core SDK.

в последней части говорится or install the .NET Core SDK.

Вопросы
1> Я установил NET5 SDK на сервере CI, это также устанавливает MSBuild 16. *, если да, то в каком месте?
2> Где находится файл global.json?

Ответ №1:

Вы должны отметить, что .NET5 это доступно только как минимум для VS2019 16.8 и не может работать с VS2017 и MSBuild 15.x. См. Раздел Поддержка Visual Studio в Net5.0.

NET 5.0 это инструмент dontet cli, в то время MSBuild 16.x как это инструмент сборки для VS, это два разных инструмента, которые не мешают друг другу.

Чтобы использовать его, вы должны загрузить Build Tool для VS2019 и не забудьте проверить рабочую нагрузку средства сборки Net Core, рабочую нагрузку средства сборки .Net Desktop и любые другие рабочие нагрузки сборки, которые вы использовали.

Или вы должны проверить этот документ, чтобы использовать более низкий пакет SDK Net Core, который поддерживает msbuild 15.6 (например, Net Core 2.1.201 ).

Примечание: изменение global.json файла не является хорошим выбором, и это изменяет ваш внутренний проект, и он находится под угрозой. Очевидно, что изменение внешних инструментов сборки является более безопасным и совместимым.

Обновление 1

Установите VS2019 IDE на сервер сборки, который решит проблему.

Комментарии:

1. Я решил проблему, установив VS 2019 на сервер сборки. (установка только инструментов сборки для 2019 Net Core Build tool у меня не сработала)

2. А также вы хотите создать проект net472, а также проверить инструмент сборки net desktop, и если вы используете другие инструменты, интегрированные с VS2019, вам необходимо установить VS2019 IDE.

3. Спасибо, что поделились решением, и будем рады узнать, что вы решили проблему. Чтобы помочь улучшить тикет, я добавил ваш обходной путь в ответ, и вы можете отметить ответ, чтобы помочь другим участникам сообщества искать и решать похожие проблемы. И это очень любезно с вашей стороны — сделать это. Хорошего дня!