我有一个最初是为 .NET 6 创建的项目,但后来我需要将其降级到 .NET 5。 我在项目属性中更改了目标框架并尝试编译。结果我收到了一堆错误:
GlobalUsings.g.cs(2,1,2,29): error CS8773: Feature 'global using directive' is not available in C# 9.0. Please use language version 10.0 or greater.
文件 GlobalUsings.g.cs 是自动创建的,每次编译后都会重新出现。
最后发现原因是项目文件中多了一个属性ImplicitUsings,.net 5.0不支持。
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
我需要从文件中删除 ImplicitUsings。
为了摆脱这个由于降级到net6.0以下而导致的错误。
从 .csproj 文件中删除以下项目:
<ImplicitUsings>
<Using Include="..." />
删除标签确实有效。
但只要改变它的值也能达到目的!
<ImplicitUsings>disable</ImplicitUsings>
如果您不想删除
ImplicitUsings
或对项目文件进行更改。您可以通过以下方式告诉构建 cli 在构建过程中禁用它:
dotnet build --configuration "Release" --framework "net5.0" /p:ImplicitUsings=false /p:PublishReadyToRun=false
<ImplicitUsings>
,并且该项目针对 .Net Framework 4.7.2。因此,可以使用的最新 C# 版本是 7.3,当然它没有全局使用。然而,每次编译时,Visual Studio都会在
<MyTestProject>.GlobalUsings.g.cs
下的相应文件夹中生成一个文件
obj
,然后将其包含到项目中,然后出现编译错误。该项目是使用类上的“创建单元测试”菜单项和
NUnit3 Visual Studio 扩展生成的。创建的项目文件包含以下内容:
<ItemGroup>
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>
项目还引用了Microsoft.NET.Test.Sdk v17.11.1
.删除这个
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
就成功了。之后,带有违规全局 using 语句的文件不再生成,并且项目构建正常。