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.


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


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

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


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


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


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.


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ę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.