Błąd Nieprawidłowa opcja '6' dla / langversion; musi mieć wartość ISO-1, ISO-2, 3, 4, 5 lub wartość domyślną

90

Próbuję ukierunkować .NET 4.6, a także skorzystać z najnowszej wersji C #, zmieniając wersję językową C # na 6.

Jednak podczas kompilacji wyskoczył mi ten błąd:

Błąd Nieprawidłowa opcja '6' dla / langversion; musi mieć wartość ISO-1, ISO-2, 3, 4, 5 lub wartość domyślną

Jeśli zaktualizuję ustawienie /langversion:6w Web.Config do 5, to działa,

  <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">

Ale jak mam to rozwiązać bez uciekania się do niższej wersji językowej?

Używam programu Visual Studio 2015 Community Edition, a także ręcznie zainstalowałem .NET Framework 4.6 na wypadek, gdyby nie było domyślnie instalowane przez program Visual Studio 2015.

Projekt jest standardowym projektem szablonu ASP.NET MVC utworzonym przez program Visual Studio 2015.

Rosdi Kasim
źródło
1
W moim przypadku musiałem tylko usunąć /langversion:6...
bohdan_trotsenko
@modosansreves Spowoduje to przywrócenie domyślnej wersji językowej ... czyli C # 5, jak sądzę ... proszę sprawdzić, czy możesz użyć dowolnej funkcji języka C # 6.
Rosdi Kasim
W rzeczy samej. To pozbawia możliwości korzystania z funkcji C # 6. Dzięki.
bohdan_trotsenko

Odpowiedzi:

89

Zwróć uwagę na "typ" kompilatora w Web.Configpliku przy zmianie wersji Framework:

dla 4.5 i C # 5 -

type="Microsoft.CSharp.CSharpCodeProvider...

dla wersji 4.6 i C # 6 -

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

Więcej informacji w tym poście na forum

DrewB
źródło
20
! To działa .. Chociaż uważam to za błąd w Visual Studio 2015 dla nie aktualizuje się automatycznie, kiedy to ponownie kierować do mojej aplikacji .NET 4.6 i C # 6
Rosdi Kasim
Myślę, że masz rację. Ukąszyło mnie to i natknąłem się na twoje pytanie. Na szczęście następny link, który znalazłem, był odpowiedzią.
DrewB
1
Czy istnieje uniwersalny CSharpCodeProvider dla wszystkich obiektów docelowych .NET?
denfromufa
1
Mój web.config miał poprawny typ, a wersja językowa była ustawiona jako domyślna. <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" />Po prostu wyczyszczenie rozwiązania i
ponowna
31

Zaktualizuj następujące pakiety NuGet (niezależnie od tego, które są zainstalowane), aby rozwiązać problem:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers
Deweloper
źródło
to bardziej komentarz niż odpowiedź
Al Lelopath
2
To jest prawdziwe rozwiązanie! Odinstaluj ten pakiet
nuget
Przerzuciłem się na C # 6.0, ale pakiet był nadal w starszej wersji. Aktualizacja z 1.0 do 1.0.4 działała dla mnie.
Mixxiphoid
7
@AlLelopath tylko dlatego, że jest to mała odpowiedź, nie oznacza, że ​​jest to komentarz. Ten mały „komentarz” rozwiązał problem dla mnie i dla innych, więc lepiej pozostać jako odpowiedź.
Shimmy Weitzhandler
14

1. Przejdź do projektu i wybierz właściwości projektu.

2 Wybierz opcję Buduj i kliknij przycisk Zaawansowane.

3. Wybierz domyślną wersję językową.

4. zapisz.

https://youtu.be/IP8feQeWqkk

Prashant vishwakarma
źródło
Wystąpił ten błąd w VS2013. To rozwiązanie niestety nie zadziałało.
Jviaches
2
Ten pracował dla mnie. Wszystkie inne sugerowane rozwiązania dotyczyły zmiany pliku web.config lub alternatywnie pobierania pakietów / aktualizacji NuGet. Kompilator ciągle wyrzucał błędy dotyczące nieprawidłowej wersji, co mnie zmyliło, ponieważ nie miałem tego ustawienia w pliku konfiguracyjnym. Okazuje się, że zaawansowane właściwości kompilacji nie zostały automatycznie zaktualizowane przez aktualizację pakietu NuGet.
Kiran Ramaswamy
3

Spotkałem się z takim zachowaniem, jeśli projekt nie został w pełni zaktualizowany do VS2015. W przypadku, gdy otworzysz rozwiązanie z 2015 roku w VS2013 - otrzymasz ten błąd

Sergii Lischuk
źródło
Ja też myślę, że ten błąd w zasadzie oznacza, że ​​musisz zainstalować VS2015! Ktoś inny w projekcie używa nowszych funkcji językowych, z którymi 2013 nie może sobie poradzić
JonnyRaa,
2

Otwórz konsolę Menedżera pakietów NuGet i uruchom to następujące polecenie

Pakiet aktualizacji Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

Mahfuj Ur Rahman
źródło
0

Zobacz odpowiedź na dziwny błąd kompilacji ASP.NET! .

Obniżenie języka C # do 5 tylko maskuje problem, gdy tylko ktoś użyje funkcji C # 6, Twoja witryna / projekt ulegnie awarii i nadal będziesz spędzać czas na naprawianiu go ponownie. Wypróbuj rozwiązanie w linku.

PBo
źródło
0

Podobny problem miałem, gdy ładowałem aplikację po raz pierwszy w Visual Studio 2019. Zaktualizowanie nugeta „Microsoft.CodeDom.Providers.DotNetCompilerPlatform” do nowszej wersji załatwiło sprawę.

Govind
źródło