Ошибка Недопустимая опция «6» для / langversion; должен быть ISO-1, ISO-2, 3, 4, 5 или по умолчанию


90

Я пытаюсь настроить таргетинг на .NET 4.6, а также воспользоваться преимуществами последней версии C #, изменив версию языка C # на 6.

Однако во время компиляции я получил эту ошибку:

Ошибка Недопустимая опция «6» для / langversion; должен быть ISO-1, ISO-2, 3, 4, 5 или по умолчанию

Если я /langversion:6обновлю параметр Web.Config до 5, он будет работать,

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">

Но как мне решить эту проблему, не прибегая к более ранней языковой версии?

Я использую Visual Studio 2015 Community Edition, и я также установил .NET Framework 4.6 вручную на тот случай, если он не был установлен по умолчанию Visual Studio 2015.

Проект представляет собой стандартный проект шаблона ASP.NET MVC, созданный Visual Studio 2015.


1
В моем случае мне оставалось только удалить /langversion:6...
bohdan_trotsenko 07

@modosansreves Это вернется к языковой версии по умолчанию ... я считаю, что это C # 5 ... проверьте, можете ли вы использовать какую-либо из языковых функций C # 6.
Росди Касим

Конечно. Это лишает возможности использовать C # 6. Благодарю.
bohdan_trotsenko 07

Ответы:


89

Обратите внимание на "тип" компилятора в Web.Configфайле при изменении версии Framework:

для 4.5 и C # 5 -

type="Microsoft.CSharp.CSharpCodeProvider...

для 4.6 и C # 6 -

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

Больше информации в этом сообщении на форуме


20
Это работает! .. Хотя я считаю это ошибкой в ​​Visual Studio 2015 из-за того, что это не обновляется автоматически, когда я перенаправляю свое приложение на .NET 4.6 и C # 6.
Росди Касим,

Думаю, в этом ты прав. Меня это задело, и я наткнулся на ваш вопрос. К счастью, следующая найденная мной ссылка была ответом.
DrewB

1
Есть ли универсальный CSharpCodeProvider для всех целей .NET?
denfromufa

1
Мой web.config имел правильный тип, а языковая версия была установлена ​​по умолчанию. <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />Просто очистка решения и перекомпиляция исправили его для меня в VS 2019.
joym8

32

Обновите следующие пакеты NuGet (в зависимости от того, какой из них установлен), чтобы решить проблему:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers

это больше комментарий, чем ответ
Эл Лелопат

2
Это настоящее решение !! Удалите этот пакет
nuget,

Я перешел на C # 6.0, но пакет все еще был в более старой версии. У меня сработало обновление с 1.0 до 1.0.4.
Mixxiphoid

7
@AlLelopath просто потому, что это небольшой ответ, не делает его комментарием. Этот крошечный «комментарий» решил проблему для меня и для других, так что лучше оставить его в качестве ответа.
Shimmy Weitzhandler

Для тех, кому нужно: «пакет обновлений Microsoft.CodeDom.Providers.DotNetCompilerPlatform», а затем «пакет обновлений Microsoft.Net.Compilers»
Теотонио

14

1. Перейдите в Project и выберите свойства вашего проекта.

2 Выберите «Сборка» и нажмите кнопку «Дополнительно».

3. Выберите язык версии по умолчанию.

4. Сохраните.

https://youtu.be/IP8feQeWqkk


Была эта ошибка в VS2013. К сожалению, это решение не сработало.
Jviaches

2
Этот сработал для меня. Все другие предлагаемые решения касались изменения файла web.config или, альтернативно, загрузки пакетов / обновлений NuGet. Компилятор продолжал выдавать ошибки о недопустимой версии, что меня сбивало с толку, поскольку у меня не было этой настройки в файле конфигурации. Оказывается, расширенные свойства сборки не обновлялись автоматически при обновлении пакета NuGet.
Kiran Ramaswamy

3

Я встречал такое поведение, если проект не был полностью обновлен до VS2015. Если вы откроете решение 2015 года в VS2013 - вы получите эту ошибку


Я тоже считаю, что эта ошибка означает, что вам нужно установить VS2015! Кто-то еще в проекте использует новые языковые функции, с которыми не может справиться 2013 год
JonnyRaa

2

Откройте консоль диспетчера пакетов NuGet и выполните следующую команду

Пакет обновления Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r


0

См. Ответ на странную ошибку компиляции ASP.NET! .

Понижение языка C # до 5 только маскирует проблему, как только кто-то использует функцию C # 6, ваш веб-сайт / проект сломается, и вы все равно потратите время на его исправление. Попробуйте решение по ссылке.


0

У меня была аналогичная проблема, когда я впервые загружал приложение в Visual Studio 2019. Обновление nuget «Microsoft.CodeDom.Providers.DotNetCompilerPlatform» до более поздней версии помогло мне.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.