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.
c#
asp.net
asp.net-mvc
iis
Kyle Carlson
źródło
źródło
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.
źródło
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>
źródło
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 #.
źródło
W moim przypadku błąd był następujący:
Otworzyłem plik .csproj w notatniku i zobaczyłem następującą linię:
Ostatnio zmieniłem liczbę całkowitą z zakresu od 1 do 6
<LangVersion>6</LangVersion>
Błąd zniknął!
źródło
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
źródło
w moim przypadku (projekt tworzymy w innym systemie):
Mogę uruchomić ten projekt.
źródło
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
źródło
Zaktualizuj pakiet Microsoft.Net.Compilers Nuget do najnowszej wersji (co najmniej 2.x)
źródło
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>
źródło
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ć)
https://developercommunity.visualstudio.com/content/problem/519531/c-7x-versions-do-not-seem-to-work-in-vs2019.html
źródło
Zaktualizowałem Microsoft.Net.Compilers do wersji 2.0 lub wyższej
Zobacz
źródło
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>
źródło
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.
źródło
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.
źródło
W moim przypadku komunikat o błędzie brzmiał:
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.
Rozwiązanie
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”.
źródło
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.
źródło
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')" />
źródło