Funkcja „używanie deklaracji” nie jest dostępna w C # 7.3. Proszę użyć wersji językowej 8.0 lub nowszej - Błąd na jednym komputerze, ale działa na innym


24

W przypadku używania Visual Studio Enterprise 16.3.7na dwóch osobnych komputerach jedna buduje się dobrze, a druga maszyna zgłasza błąd:

Funkcja „używanie deklaracji” nie jest dostępna w C # 7.3. Proszę użyć wersji językowej 8.0 lub nowszej.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

To można łatwo rozwiązać na maszynie roboczej brak ustawiając LangVersionw .csprojjak sugeruje tutaj https://stackoverflow.com/a/48085575/3850405 albo niech Visual Studio automatycznie naprawić jak ekranie wydruku powyżej.

<LangVersion>8.0</LangVersion>

Nie rozumiem, dlaczego jedna maszyna dobrze się buduje bez tego wejścia, .csproja druga potrzebuje jej?


Jeśli pojawi się taki błąd, oznacza to, że nie jest to projekt C # 8, lub używasz wersji Resharper z błędem analizy
— Panagiotis Kanavos

Co to jest TargetFramework i LangVersion w twoim csproj?
— Panagiotis Kanavos

@PanagiotisKanavos Tak, ale projekt opiera się na jednej maszynie, a nie na drugiej - tego nie rozumiem. ReSharper nie jest używany.
— Ogglas

Może to oznaczać, że brakuje zestawu SDK 3.0 na jednym komputerze. Co dotnet --list-sdkspokazuje
— Panagiotis Kanavos

@PanagiotisKanavos Target framework .NET Framework 4.6.1i LangVersionnie jest ustawiony.
— Ogglas

Odpowiedzi:


20

Otrzymałem ten sam błąd, ale po prostu zapomniałem dołączyć

<LangVersion>8.0</LangVersion>

atrybut we WSZYSTKICH plikach .csproj w rozwiązaniu. Oto moja obecna konfiguracja c # 8:

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
    <NullableContextOptions>enable</NullableContextOptions>
  </PropertyGroup>

Uważam, że następujące dokumenty są najbardziej pomocne podczas migracji z rdzenia 2.2 do 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1


2
Możesz użyć <LangVersion>latest</LangVersion>zamiast<LangVersion>8.0</LangVersion>
— Eliahu Aaron

Myślę, że pierwszy link MSDN 2.2 -> 3.0powinien zawierać link do następujących dokumentów: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 Próbowałem edytować odpowiedź, aby ją zmienić, ale „sugerowana kolejka edycji jest pełny ”, więc zamiast tego opublikuję tutaj.
— ahillier88


10

Może to być spowodowane tym, że kompilator domyślnie używa różnych wersji językowych C # dla różnych struktur docelowych.

Aby zastąpić domyślny język C #, dodaj do pliku projektu (zgodnie z sugestią w pytaniu):

<PropertyGroup>
   <LangVersion>8.0</LangVersion>
</PropertyGroup>

lub:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Zobacz Wersje językowe C #, aby uzyskać domyślne wersje językowe C # dla różnych platform docelowych i jak ręcznie wybrać wersję językową C #.

Zobacz także odpowiedź na temat przepełnienia stosu Czy C # 8 obsługuje .NET Framework? po więcej informacji na ten temat.


Oto część artykułu na temat wersji językowej C # :

Wersja językowa w C #

Najnowszy kompilator C # określa domyślną wersję językową na podstawie docelowych ram lub ram projektu. Wynika to z faktu, że język C # może mieć funkcje zależne od typów lub składników środowiska wykonawczego, które nie są dostępne w każdej implementacji platformy .NET. Zapewnia to również, że niezależnie od celu, na którym opiera się Twój projekt, domyślnie otrzymujesz najwyższą kompatybilną wersję językową.

Reguły w tym artykule dotyczą kompilatora dostarczanego z Visual Studio 2019 lub .NET Core 3.0 SDK. Kompilatory C #, które są częścią instalacji Visual Studio 2017 lub wcześniejszej wersji zestawu .NET Core SDK, domyślnie korzystają z C # 7.0.

Domyślne

Kompilator określa wartość domyślną na podstawie następujących reguł:

--------------------------------------------------------
Target framework | version | C# language version default
--------------------------------------------------------
.NET Core        | 3.x     | C# 8.0
.NET Core        | 2.x     | C# 7.3
.NET Standard    | 2.1     | C# 8.0
.NET Standard    | 2.0     | C# 7.3
.NET Standard    | 1.x     | C# 7.3
.NET Framework   | all     | C# 7.3
--------------------------------------------------------

Zastąp ustawienie domyślne

Jeśli musisz jawnie określić swoją wersję C #, możesz to zrobić na kilka sposobów:

  • Ręcznie edytuj plik projektu.
  • Ustaw wersję językową dla wielu projektów w podkatalogu.
  • Skonfiguruj opcję kompilatora -langversion.

Edytuj plik projektu

Możesz ustawić wersję językową w pliku projektu. Na przykład, jeśli chcesz bezpośrednio uzyskać dostęp do funkcji podglądu, dodaj taki element:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

Ta wartość previewkorzysta z najnowszej dostępnej wersji językowej C # podglądu obsługiwanej przez kompilator.

Skonfiguruj wiele projektów

Aby skonfigurować wiele projektów, możesz utworzyć plik Directory.Build.props zawierający ten <LangVersion>element. Zazwyczaj robisz to w katalogu rozwiązań. Dodaj następujące elementy do pliku Directory.Build.props w katalogu rozwiązania:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

Teraz kompilacje w każdym podkatalogu katalogu zawierającego ten plik będą używać wersji zapoznawczej C #. Aby uzyskać więcej informacji, zobacz artykuł na temat dostosowywania kompilacji .


8

Pobrałem najnowszą wersję .Net Core 3.0 i 3.1 i miałem ten sam problem. Dla mnie poprawka zdawała się pobierać najnowszą aktualizację programu Visual Studio 2019 (do wersji 16.4.2).

Spowodowało to również ponowne uruchomienie komputera i błąd zniknął.


To nie jest numer wersji VS2019, wyglądają jak 16.xy Użyj pomocy> Informacje.
— Hans Passant

4.7.03056 to wersja .NET Framework, ostatnia wersja VS to obecnie 16.4.4
— Alex
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.