Использование 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 не будет работать).