Сервер сборки старого приложения ASP.NET 4 не может создать новую C # 7, но он работает в разработке - PullRequest
0 голосов
/ 01 ноября 2018

Я недавно начал работать с устаревшей ASP.NET кодовой базой на основе .NET framework 4.0 . Нам удалось передать все, начиная от Visual Studio 2012 до VS 2017 , обновив сервер сборки новой версией Jenkins и установив .NET Framework 4.7.x.

Локально мы можем написать код C # последней версии (7.3), и сборка работает (VS не использует MSBuild, если я правильно помню), но когда мы развертываем на сервере сборки, сборка завершается неудачно, потому что MSBuild не может распознавать конструкции более новые, чем C # 4.0 . Чтобы избежать ошибок, я установил версию lang на 4.0 (расширенные свойства сборки для проектов), поэтому, если я напишу слишком новый C # VS, он заблокирует меня в dev, но мы бы хотели начать использовать новый C #.

Мы также пытались исправить C # 7.3 непосредственно в проекте (<LangVersion>7.3</LangVersion> в PropertyGroup внутри csproj) и свойство ToolsVersion элемента Project (csproj) равным 14.0, но при этом сборка MSBuild завершается с ошибкой:

CS1617: неверный параметр «6» для / langversion; должен быть ISO-1, ISO-2, 3, 4, 5 или по умолчанию

Здесь объясняется, что то, что я хочу сделать, возможно: https://www.dotnetcurry.com/dotnet/1427/build-apps-different-dotnet-framework-versions

Независимо от того, какую версию платформы .NET мы нацеливаем в проекте, Используемая языковая версия C # не изменится. Это хорошо, потому что Подавляющее большинство языковых функций, которые были введены позже версии языка не зависят от CLR или определенных API. Они являются только синтаксическим сахаром и байт-кодом, сгенерированным Компилятор все еще будет работать в .NET Framework 2.0.

У кого-нибудь есть представление о том, какую ошибку мы совершаем?

1 Ответ

0 голосов
/ 26 апреля 2019

Проблема заключалась в том, что на сервере сборки MSBuild не был установлен должным образом, а сценарии сборки получили старый. Установка инструментов Visual Studio 2017 Build и исправление пути к сценарию, который мы решили.

После того, как у нас возникла проблема «Задача« GetReferenceNearestTargetFrameworkTask »не найдена», мы решили, как описано здесь: Задача «GetReferenceNearestTargetFrameworkTask» не найдена (правильный ответ зависит от того, какую стратегию вы использовали для установки инструментов VS Buld).

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