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.6C# 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.
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:
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.
Solution 6 - C#
I did the following and it solved my issue:
-
create a file named "Directory.Build.props" in the solution directory and writing this code:
<Project> <PropertyGroup> <LangVersion>latest</LangVersion> </PropertyGroup> </Project>
-
Deleted the .vs folder (it is hidden in the solution directory)
-
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>