Zachowano ten błąd podczas uruchamiania nowej aplikacji ASP.NET MVC (prosto ze społeczności VS 2015) na komputerze z systemem Windows 2008 Server.
Zachowano ten błąd podczas uruchamiania nowej aplikacji ASP.NET MVC (prosto ze społeczności VS 2015) na komputerze z systemem Windows 2008 Server.
Odpowiedzi:
Wiele osób się na to wpada, więc chciałem zamieścić tutaj.
Znalazłem szalenie łatwe obejście dzięki temu facetowi: Expertdebugger .
Po prostu obniż wersję językową z C # 6 do C # 5, na przykład:
<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">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
Zmienić langversion:6
kierunek do dołu z 6 na 5 -langversion:5
Naprawiłem to dla mnie. Podziękuj mu.
Jeśli chcesz używać C # 6.0:
.config
plik, aby wykonać następujące modyfikacje.Poszukaj system.codedom
i zmodyfikuj go, aby wyglądał tak, jak pokazano poniżej:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Stwierdziłem, że bezpośrednią przyczyną błędu w moim przypadku było:
ma to sens, ponieważ błąd mówi, że istnieje nieprawidłowa opcja dla języka.
ale wcześniej to działało dobrze - więc musiało zostać wybrane. co się zmieniło? okazuje się, że członek mojego zespołu został uaktualniony do wersji 2017, podczas gdy nadal korzystałem z 2015 r. po wprowadzeniu zmian w projekcie wersja językowa została zmieniona i otrzymałem tę zmianę w kontroli źródła. ale wybrana wersja nie była dostępna dla mojej wersji vs, więc była pusta - stąd błąd. po wybraniu wartości w menu rozwijanym języka (wybrałem domyślny), pojawił się nowy błąd. nowy błąd powodował awarię kompilacji we wszystkich wierszach kodu, w których była używana nowsza wersja języka C #. Zmieniłem kod, aby wykonywał te same funkcje, ale z moją składnią w wersji C # i rozwiązanym problemem.
więc chociaż bezpośrednią przyczyną błędu był rzeczywiście nieprawidłowy wybór wersji językowej, główną przyczyną był konflikt różnych wersji vs / c #.
W moim przypadku błąd był następujący:
Błąd CS1617 Nieprawidłowa opcja „najnowsza” dla / langversion; musi mieć wartość ISO-1, ISO-2, wartość domyślną lub liczbę całkowitą z zakresu od 1 do 6.
Otworzyłem plik .csproj w notatniku i zobaczyłem następującą linię:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
Ostatnio zmieniłem liczbę całkowitą z zakresu od 1 do 6
<LangVersion>6</LangVersion>
Błąd zniknął!
W moim przypadku użyłem niewłaściwego programu MSBuild.exe, znajdującego się w:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Aby rozwiązać ten błąd, zaktualizowałem moją zmienną środowiskową PATH, aby rozpocząć korzystanie z programu Visual Studio 2017 MSBuild.exe:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
Zobacz ten link, aby uzyskać szczegółowe informacje: Błąd CS1056: nieoczekiwany znak „$” uruchamiający msbuild w procesie ciągłej integracji tfs
w moim przypadku (projekt tworzymy w innym systemie):
Mogę uruchomić ten projekt.
Zamiast zmieniać wersję językową z 6 na 5, zmień atrybut „type” w znaczniku kompilatora z
Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
do
Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Najłatwiejszym rozwiązaniem dla mnie była aktualizacja kompilatorów .Net poprzez Menedżera pakietów
Zainstaluj pakiet Microsoft.Net.Compilers
a następnie zmieniając wiersze Web.Config na ten
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Okazuje się, że był to problem, ponieważ projekt ASP.NET MVC 4 odwoływał się do określonej wersji pakietu Microsoft.Net.Compilers. Program Visual Studio korzystał z kompilatora z tego konkretnego pakietu, a nie kompilatora zainstalowanego na komputerze w inny sposób.
Ostrzeżenie czy coś byłoby fajne od VS2019 :-)
Rozwiązaniem jest wówczas aktualizacja pakietu Microsoft.Net.Compilers do nowszej wersji.
Wersja 1.x jest dla C # 6 Wersja 2.x jest dla C # 7 Wersja 3.x jest dla C # 8 Sposób rozwiązania tego problemu nie był od razu oczywisty. Program Visual Studio mógł zasugerować lub wskazać, że wybierając nową wersję w ustawieniach projektu, ustawienie powoduje teraz konflikt z pakietem zainstalowanym w projekcie.
(Skończyło się na włączeniu rejestrowania MSBuild na poziomie diagnostycznym, aby dowiedzieć się, którego CSC.EXE IDE naprawdę próbuje użyć)
I właśnie zmienił langversion
się default
i pracował dla mnie. VS 2015
<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:default /nowarn:1659;1699;1701″>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
<compiler language=”vb;vbs;visualbasic;vbscript” extension=”.vb” type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
Wyczyść rozwiązanie i skompiluj ponownie W moim przypadku, jakiekolwiek poprzednie ustawienia blokowały się z powodu niezgodności. Zaimportowałem nowy projekt i zbudowałem go, próbowałem zmienić wersje i tak dalej. wyczyść rozwiązania i kompilacja zadziałała dla mnie.
W moim przypadku pobierałem bibliotekę z przykładowym kodem implementacji Keycloak firmy mattorg z GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples
Rozwiązanie było dość proste, ponieważ użyłem .Net Framework 4.6.1, ale projekt na początku błagał mnie o użycie 4.6.2. Chociaż go pobrałem, został on najpierw aktywnie wybrany, kiedy ponownie ustawiłem wszystkie instancje Visual Studion (lub lepiej zamknąć wszystkie instancje). Projekt został zmanipulowany do 4.6.1 (chociaż nie chciałem i tak wybrałem).
Po ponownym wybraniu konfiguracji, aby wybrać .Net Framework 4.6.1, błąd zniknął natychmiast.
W moim przypadku komunikat o błędzie brzmiał:
ASPNETCOMPILER: błąd CS1617: Nieprawidłowa opcja „7.3” dla / langversion; musi mieć wartość ISO-1, ISO-2, wartość domyślną lub liczbę całkowitą z zakresu od 1 do 6.
Jak wspomniano w tym problemie GitHub i tym poście społeczności programistów VS , wydaje się, że jest to błąd w starszym pakiecie NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform .
Po uaktualnieniu tego pakietu NuGet do wersji 3.6.0 błąd nadal występował w mojej aplikacji sieci Web.
Dowiedziałem się, że muszę usunąć stary folder „bin \ Roslyn” w mojej aplikacji sieci Web, aby to zadziałało.
Wygląda na to, że nowszy pakiet Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet (w moim przypadku 3.6.0) nie zawiera już własnego folderu „Rosyln”, a jeśli jest obecny, pierwszeństwo podczas kompilacji miał ten stary folder „Roslyn”.
Zdarzyło mi się to, kiedy ściągnąłem repozytorium po przeniesieniu go w nowe miejsce. Rozwiązaniem było wyładowanie, a następnie ponowne załadowanie każdego projektu, który wyświetlał ten błąd.
Wypróbowałem kilka innych opcji, ale nic mi nie pomogło. Również w tej sytuacji moje pliki konfiguracyjne były ustawione na język w wersji 6, więc ustawienie ich na domyślne nie rozwiązało problemu.
Jeśli powyższe opcje nie działają, a korzystałeś z pakietów NuGet, takich jak Microsoft.Net.Compilers i CodeDom, i nadal nie działają, występuje problem z plikiem projektu w otwartym pliku projektu. Plik projektu używa jednej z opcji kompilatora, która nie obsługuje wybranego języka. Otwórz plik projektu za pomocą notatnika ++ i usuń następujący wiersz.
Oryginalny plik projektu
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
<!--Don't delete below one-->
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
Usuń następujące wiersze
<Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />