Использование С# 7.1 с MSBuild

Чтобы использовать новые языковые функции С# 7.1 с Visual Studio 2017, добавьте параметр <LangVersion>latest</LangVersion> в файл проекта.

Однако создание таких проектов из MSBuild (версия 15.3.409.57025, расположенная в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin) приводит к ошибке:

CSC : error CS1617: Invalid option 'latest' for /langversion;
must be ISO-1, ISO-2, Default or an integer in range 1 to 6.

Эта функция просто еще не поддерживается MSBuild или можно заставить ее работать?

Это относится к 200+ проектам, которые изначально создавались по-разному в Visual Studio 2013 и 2015. Все они были перенаправлены на .NET 4.7 с помощью инструмента Target Framework Migrator (который сохранил много нажатий и отображался на основе при проверке изменений файла .csproj - для правильной работы).

Все проекты успешно собраны из Visual Studio 2017.

Ответ 1

Мы обнаружили, что наши проекты MVC запускали эту проблему.

Чтобы исправить, мы обновили пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet, используемый этими проектами, с версии 1.0.0 до 1.0.7.

Ответ 2

Пакеты Nuget

  • Пакет Microsoft.Net.Compilers nuget не работает, и не нужно устанавливать.

Установите следующее project/build settings

  • Установите не менее C# 7.1 или выше в свойствах сборки Debug и Release. (через: меню "Проект"> "Свойства [ProjectName]"> вкладка "Сборка"> кнопка "Дополнительно"> "Языковая версия".

  • Установка последнего на не не работает.

preview

Также убедитесь, что вы используете последнюю версию MSBuild.

Ответ 3

Добавьте ссылку на пакет Microsoft.Net.Compilers (версия 2.3.x, чтобы получить С# 7.1).

Краткое описание пакета:

Microsoft.Net.Compilers

Этот пакет включает не только С# и Visual Basic, он также изменяет цели MSBuild, чтобы включены версии компилятора, а не любые системные версии. После установки этого пакета требуется Microsoft Build Tools 2015.

Ответ 4

Если вы попали сюда из-за того, что вы получили ошибку, как упомянуто OP, запустив msbuild через командную строку (например, из агента сборки, такого как jenkins), решение может быть столь же простым, как обновить Microsoft Инструменты сборки 2015.

Это можно сделать с помощью choco install microsoft-build-tools или вручную через официальные Microsoft Build Tools 2015 или обновив установку Visual Studio 2017.

Ответ 5

У меня есть решение с консольным приложением С# с использованием здесь С# 7.1.

Используя командную строку VS 2017 (и, следовательно, MSBuild 15.3.409.57025), она работала нормально. (.csproj содержит <LangVersion>latest</LangVersion>.)

Является ли эта функция еще не поддерживаемой MSBuild, или можно ли это сделать?

Да, это так.

Какой экземпляр csc.exe запускается и какова его версия? Поскольку это выглядит, несмотря на цитирование версии, у вас неправильная версия csc.exe (сообщение об ошибке говорит 1-6, поэтому даже С# 7 не будет работать).

Ответ 6

Убедитесь, что вы изменили "Все настройки", а не только "Отладка"

enter image description here

enter image description here

иначе вы будете озадачены, почему это не удается на производстве.