为什么 StyleCopAnalyzers 认为应该在命名空间中声明全局使用,而这种语法是不可能的?

Why does StyleCopAnalyzers think that global usings should be declared within a namespace, when such syntax is not possible?

提问人:suitendaal 提问时间:8/11/2022 最后编辑:suitendaal 更新时间:8/11/2022 访问量:510

问:

我正在创建一个NUnit测试项目,在创建该项目时,MS Visual Studio创建了一个名为Usings.cs的文件,其中包含以下行

global using NUnit.Framework;

它告诉项目在每个文件中包含 NUnit 框架。

我一直在这个测试项目上运行 StyleCopAnalyzers,它一直在报告

SA1200:Using 指令应出现在命名空间声明中。

但是,当我将 within 命名空间声明global using

namespace TestProject
{
    global using NUnit.Framework;
}

我收到错误

CS8914:不能在命名空间声明中使用全局 using 指令。

正确的方法是什么?我应该将 Usings.cs 文件与 ?global usings

C# .NET 命名空间 stylecop using-directives

评论

2赞 Daniel A. White 8/11/2022
我会为此创建一个新的 c# 文件。我认为您还可以使用 csproj 项目
2赞 Daniel A. White 8/11/2022
stackoverflow.com/questions/71305266/......
2赞 Daniel A. White 8/11/2022
看来 Stylecop 也已经过时了
0赞 suitendaal 8/11/2022
放入 .csproj 文件有效!但是,对于最新的 StyleCopAnalyzers,使用单独的 c# 文件时仍然存在相同的问题<Using Include="NUnit.Framework" />

答:

1赞 Tanzim Siddiqee 8/11/2022 #1

在 .csproj 中,添加以下行

 <ItemGroup>
    <Using Include="NUnit.Framework" />
  </ItemGroup>

评论

1赞 suitendaal 8/11/2022
这只是一种解决方法,而不是为什么 StyleCopAnalyzers 不允许我使用 的问题的答案,或者在使用 StyleCopAnalyzers 时如何使用global usingsglobal usings
0赞 Tanzim Siddiqee 8/11/2022
在 C# 10.0 中,可以使用全局使用。以及随 NET 6.0 一起发布的 C# 10.0。你能告诉我你的 c# 版本吗?
0赞 suitendaal 8/11/2022
我使用的是 .NET 6.0,所以那是 C# 10.0
0赞 Tanzim Siddiqee 8/11/2022
您是否从 .csproj 文件中删除了删除 <ImplicitUsings>enable</ImplicitUsings>?
0赞 suitendaal 8/15/2022
是的,但这与 NUnit 框架有什么关系?