Ответ 1
Мы обнаружили, что наши проекты MVC запускали эту проблему.
Чтобы исправить, мы обновили пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform
NuGet, используемый этими проектами, с версии 1.0.0 до 1.0.7.
Чтобы использовать новые языковые функции С# 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.
Мы обнаружили, что наши проекты MVC запускали эту проблему.
Чтобы исправить, мы обновили пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform
NuGet, используемый этими проектами, с версии 1.0.0 до 1.0.7.
Microsoft.Net.Compilers
nuget не работает, и не нужно устанавливать.project/build settings
Установите не менее C# 7.1
или выше в свойствах сборки Debug
и Release
. (через: меню "Проект"> "Свойства [ProjectName]"> вкладка "Сборка"> кнопка "Дополнительно"> "Языковая версия".
Установка последнего на не не работает.
Также убедитесь, что вы используете последнюю версию MSBuild.
Добавьте ссылку на пакет Microsoft.Net.Compilers (версия 2.3.x, чтобы получить С# 7.1).
Краткое описание пакета:
Microsoft.Net.Compilers
Этот пакет включает не только С# и Visual Basic, он также изменяет цели MSBuild, чтобы включены версии компилятора, а не любые системные версии. После установки этого пакета требуется Microsoft Build Tools 2015.
Если вы попали сюда из-за того, что вы получили ошибку, как упомянуто OP, запустив msbuild через командную строку (например, из агента сборки, такого как jenkins), решение может быть столь же простым, как обновить Microsoft Инструменты сборки 2015.
Это можно сделать с помощью choco install microsoft-build-tools или вручную через официальные Microsoft Build Tools 2015 или обновив установку Visual Studio 2017.
У меня есть решение с консольным приложением С# с использованием здесь С# 7.1.
Используя командную строку VS 2017 (и, следовательно, MSBuild 15.3.409.57025), она работала нормально. (.csproj
содержит <LangVersion>latest</LangVersion>
.)
Является ли эта функция еще не поддерживаемой MSBuild, или можно ли это сделать?
Да, это так.
Какой экземпляр csc.exe
запускается и какова его версия? Поскольку это выглядит, несмотря на цитирование версии, у вас неправильная версия csc.exe
(сообщение об ошибке говорит 1-6
, поэтому даже С# 7 не будет работать).
Убедитесь, что вы изменили "Все настройки", а не только "Отладка"
иначе вы будете озадачены, почему это не удается на производстве.