全局引用命名空间?

5
有没有一种方法可以在整个解决方案中全局引用命名空间?
因此,而不是在每个代码文件中都有这些行:
using System;
using MyNamespace;

只需声明一次,每个代码文件都可以使用它们。

顺便说一下,我正在使用Visual Studio。


在C# 10及以上版本中,您可以使用global using:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive#global-modifier - Tohid
7个回答

6
不,C#没有这个概念。在这方面,每个源文件都是独立的。(如果using指令在命名空间声明中,那么这些指令与同级命名空间声明中的其他using指令也是独立的,但在我的经验中,这种情况相当罕见。)
您不需要使用ReSharper来更改新类中包含的内容。您可以使用Visual Studio模板
编辑:为了澄清关于命名空间内的using指令的问题,假设我们有以下内容(全部在一个文件中):
using Foo;

namespace X
{
    using Bar;
    // Foo and Bar are searched for code in here, but not Baz
}

namespace Y
{
    using Baz;
    // Foo and Baz are searched for code in here, but not Bar
}

通常我在文件中只有一个命名空间声明,并将所有的using指令放在它之前。

你太厉害了。每次当我看到(或发布)一份我认为完整并且最终的答案时,你总能想出更好的东西 :) - Philippe Leybaert
谢谢Jon。在你的第三句话中,你是不是指如果你在另一个命名空间(CustomNS)内声明了命名空间,并且如果你使用CustomNS,那些命名空间不会被包含在使用该命名空间的文件中? - Joan Venge
谢谢Jon。在命名空间Y内添加“using X;”怎么样?我实际上尝试过,但它没有让我访问Bar中包含的内容(Bar包含在X中)。 - Joan Venge
不会。using指令只影响该命名空间声明内的源代码查找(如果在顶部,则影响整个文件)。它不会将该查找嵌入生成的代码中或类似的操作。 - Jon Skeet
1
这个答案现在有些过时了,正如其他人指出的,现在有一个项目范围的 global using ns 的概念,至少在某种程度上满足了原帖所寻求的要求。 - Peter Lillevold

5

不,这是不可能的。

如果您正在使用ReSharper,您可以设置选项在每个新文件中包含特定的using指令。


2
不可以在.NET或.NET CORE中全局引用命名空间。但是,您可以在整个解决方案中全局使用项目级别的命名空间。这个功能将从 c#10/.NET 6 开始提供。目前它还在预览阶段,但将在2021年11月发布。
========= .NET 6项目级别全局使用命名空间=========
在项目根目录下创建一个类文件,例如GlobalNamespace.cs
global using System;
global using System.Linq;
global using System.Text.RegularExpressions;
global using System.Threading.Tasks;

那么您就不需要在项目的其他已经全局声明过的.cs文件中再次声明using namespace

2
从这个SO问题和后续的博客文章中得知,您可以编辑Visual Studio默认模板来设置新类为public。
要做到这一点,请查看此zip文件中的文件:[程序文件][Visual Studio]\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class.zip,并根据需要修改Class.cs文件。此外,Visual Studio可能已缓存此文件在这里:[程序文件][Visual Studio]\Common7\IDE\ItemTemplatesCache\CSharp\Code\1033\Class.zip。

2
在C# 10.0中,你可以使用全局Using
global using System;
global using MyNamespace;

该功能截至2021年09月06日仍处于“预览”状态。 - BillW

0

正如其他人所提到的,Visual Studio模板是最好的选择。

请注意,仅仅在模板中添加一个using语句并不能确保编译器能够解析您的类型。因此,如果您在每个类中都添加了一个MyNamespace的using语句,您可能还需要为您的项目添加一个程序集引用。有关更多信息,请参见C# FAQ


-3
作为一个新手在C#编程中我错过的一招是查看"引用"(在VS中),右键点击然后选择"添加新引用"。这在将多个项目组合起来并且我已经创建了一些通用类以便在其他地方重复使用时,特别有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接