Feature 'using declarations' is not available in C# 7.3. Please use language version 8.0 or greater - Error on one machine but works on another

C#.Net.Net 4.6

C# Problem Overview


When using Visual Studio Enterprise 16.3.7 on two separate machines, one builds fine and the other machine throws the error:

> Feature 'using declarations' is not available in C# 7.3. Please use > language version 8.0 or greater.

enter image description here

enter image description here

This can easily be solved on the non-working machine by setting LangVersion in .csproj as suggested here https://stackoverflow.com/a/48085575/3850405 or let Visual Studio automatically fix it like the screenshot above.

<LangVersion>8.0</LangVersion>

What I can't understand is why one machine builds fine without this line in .csproj and the other machine needs it?

C# Solutions


Solution 1 - C#

I received the same error, but I had simply forgotten to include the

<LangVersion>8.0</LangVersion>

attribute in ALL the .csproj files in the solution. The following is my current c# 8 setup:

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

I found the following documents to be the most helpful when migrating from core 2.2 to 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1

Solution 2 - C#

This can be because the compiler uses by default different C# language versions for different Target Frameworks.

To override the default C# language, add to project file (as suggested in question):

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

or:

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

Note: It is not recommended to use a language version newer than the default.
From C# language versioning - Microsoft Docs (as of 03/11/2022): > This default choice also ensures you don't use a language that requires types or runtime behavior not available in your target framework. Choosing a language version newer than the default can cause hard to diagnose compile-time and runtime errors.


See C# language versioning - Microsoft Docs for the default C# language versions for the different target frameworks and how to manually select the C# language version.

See also the stack overflow answer Does C# 8 support the .NET Framework? for more information on this topic.


Here is part of the C# language versioning - Microsoft Docs article (as of 03/11/2022) which explains about the default language versions for different target frameworks:

> # C# language versioning > The latest C# compiler determines a default language version based on your project's target framework or frameworks. Visual Studio doesn't provide a UI to change the value, but you can change it by editing the csproj file. The choice of default ensures that you use the latest language version compatible with your target framework. You benefit from access to the latest language features compatible with your project's target. This default choice also ensures you don't use a language that requires types or runtime behavior not available in your target framework. Choosing a language version newer than the default can cause hard to diagnose compile-time and runtime errors. > > C# 10 is supported only on .NET 6 and newer versions. C# 9 is supported only on .NET 5 and newer versions. C# 8.0 is supported only on .NET Core 3.x and newer versions. > > ... > > ## Defaults > > The compiler determines a default based on these rules: > > lang-none > ╔══════════════════╦═════════╦═════════════════════════════╗ > ║ Target framework ║ version ║ C# language version default ║ > ╠══════════════════╬═════════╬═════════════════════════════╣ > ║ .NET ║ 6.x ║ C# 10 ║ > ║ .NET ║ 5.x ║ C# 9.0 ║ > ║ .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 ║ > ╚══════════════════╩═════════╩═════════════════════════════╝ >

Solution 3 - C#

I had to update Visual Studio to version from 16.3.X to 16.4.2. This resolved the problem and I didn't have to add any LangVersion.

Credits: https://github.com/aspnet/AspNetCore.Docs/issues/16047

Solution 4 - C#

I downloaded the latest version of .Net Core 3.0 and 3.1 and had the same issue. For me, the fix seemed to download the latest update for Visual Studio 2019 (to version 16.4.2).

This also restarted my computer and the error went away.

Solution 5 - C#

2021

Cause: You may be targeting .NET Standard 2.0, which uses C# 7.3.

Fix: Under the project's Properties, click on the Application panel and choose .NET Standard 2.1 as the Target framework.

After the above change, Visual Studio 2019 will fix the issue by itself, and no LangVersion setting will be necessary.

See: C# language versioning

enter image description here

Solution 6 - C#

I did the following and it solved my issue:

  1. create a file named "Directory.Build.props" in the solution directory and writing this code:

    <Project>
     <PropertyGroup>
      <LangVersion>latest</LangVersion>
     </PropertyGroup>
    </Project>
    
  2. Deleted the .vs folder (it is hidden in the solution directory)

  3. Restart the Visual Studio

Solution 7 - C#

If you install ReSharper, it will automatically modify the csproj files for you ;)

Solution 8 - C#

Check that you have valid configuration on both machines (Debug/Release, x64/Any CPU). This could also result to this error.

Solution 9 - C#

You must forget this tag in one of your PropertyGroup 's in your *.csproj file.

<LangVersion>8.0</LangVersion>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOgglasView Question on Stackoverflow
Solution 1 - C#James LoFortiView Answer on Stackoverflow
Solution 2 - C#Eliahu AaronView Answer on Stackoverflow
Solution 3 - C#tamsivView Answer on Stackoverflow
Solution 4 - C#CurtView Answer on Stackoverflow
Solution 5 - C#SabuncuView Answer on Stackoverflow
Solution 6 - C#EhsanSafariView Answer on Stackoverflow
Solution 7 - C#Cătălin RădoiView Answer on Stackoverflow
Solution 8 - C#PopinView Answer on Stackoverflow
Solution 9 - C#Abdelrahman ELGAMALView Answer on Stackoverflow