Я недавно начал работать с устаревшей 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.
У кого-нибудь есть представление о том, какую ошибку мы совершаем?