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

Чтобы использовать новые языковые функции C# 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.

5 ответов

Решение

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

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

Пакеты Nuget

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

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

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

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

предварительный просмотр

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

Добавьте ссылку на пакет https://www.nuget.org/packages/Microsoft.Net.Compilers/ (версия 2.3.x, чтобы получить C# 7.1).

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

Microsoft.Net.Compilers

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

Убедитесь, что вы изменили "Вся конфигурация", а не только "Отладка"

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

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

Вы можете сделать это с помощью https://chocolatey.org/packages/microsoft-build-tools или вручную через официальные инструменты Microsoft Build Tools 2015 или обновив установку Visual Studio 2017.

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

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

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

Да, это.

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

Другие вопросы по тегам