【问题标题】:Referencing namespaces globally?全局引用命名空间?
【发布时间】:2010-10-31 10:26:36
【问题描述】:

有没有办法在整个解决方案中全局引用命名空间?

所以不要在每个代码文件中都有这些行:

using System;
using MyNamespace;

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

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

【问题讨论】:

    标签: c# .net namespaces


    【解决方案1】:

    不,您不能在 .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】:

      C# 10.0 中,您可以使用Global Usings

      global using System;
      global using MyNamespace;
      

      【讨论】:

      • 截至 2021 年 9 月 6 日,该功能仍处于“预览阶段”
      【解决方案3】:

      作为 CSharp 的新手,我想念的一个技巧是查看“参考”(在 VS 中),右键单击并“添加新参考”。这在组合多个项目时特别方便,我已经制作了一些通用类以在其他地方重用。

      【讨论】:

        【解决方案4】:

        正如其他人所提到的,Visual Studio 模板是必经之路。

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

        【讨论】:

          【解决方案5】:

          不,C# 没有这个概念。每个源文件在这方面都是独立的。 (如果 using 指令在命名空间声明中,它们也独立于对等命名空间声明中的其他 using 指令。根据我的经验,这种情况非常罕见。)

          不过,您不需要 ReSharper 来更改新类中包含的内容。您可以使用Visual Studio templates

          编辑:只是为了澄清关于在命名空间中使用指令的要点,假设我们有(全部在一个文件中):

          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 指令放在它之前。

          【讨论】:

          • 你太棒了。每次我看到(或发布)一个对我来说看起来完整且最终的答案时,您都会想出更好的东西:)
          • 谢谢乔恩。在您的第三句话中,您的意思是,如果您在另一个名称空间 (CustomNS) 中有名称空间声明,并且如果您使用 CustomNS,那么使用该名称空间的文件不会包含这些名称空间?
          • 谢谢乔恩。添加“使用X;”怎么样?在命名空间 Y?我实际上尝试过,但它没有让我访问 Bar 内部的内容(包含在 X 中)。
          • 不,不会。 using 指令仅影响在该名称空间声明中查找源代码(或整个文件,如果它位于顶部)。它不会将该查找嵌入到生成的代码或类似的东西中。
          【解决方案6】:

          来自SO question 和后续blog post。您可以编辑 Visual Studio 默认模板。

          为此,请查看此 zip 中的文件:[Program Files][Visual Studio]\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class.zip

          并根据需要修改 Class.cs 文件。此外,Visual Studio 可能已在此处缓存此文件: [程序文件][Visual Studio]\Common7\IDE\ItemTemplatesCache\CSharp\Code\1033\Class.zip

          【讨论】:

            【解决方案7】:

            不,这是不可能的。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-19
              • 2012-05-03
              相关资源
              最近更新 更多