C# 在类库中隐藏仅包含内部类型的命名空间?

C# 在类库中隐藏仅包含内部类型的命名空间?,c#,namespaces,intellisense,hide,internal,C#,Namespaces,Intellisense,Hide,Internal,我有一个类库,它有几个只包含内部类型的名称空间 但是,在应用程序项目中使用类库时,名称空间以intellisense显示,但它们当然是空的。当我在其他项目中使用intellisense时,有没有办法完全隐藏名称空间 我已经尝试将EditorBrowsableAttribute应用于所有内部类,但我想做的是将其应用于名称空间,这当然是不可能的 或者,如果我足够关心这一点,我必须将类型移动到包含公共类型的命名空间中,这是唯一的选择吗?我以前遇到过这个问题,但没有找到解决方案,只有一个在您的项目中可能

我有一个类库,它有几个只包含内部类型的名称空间

但是,在应用程序项目中使用类库时,名称空间以intellisense显示,但它们当然是空的。当我在其他项目中使用intellisense时,有没有办法完全隐藏名称空间

我已经尝试将
EditorBrowsableAttribute
应用于所有内部类,但我想做的是将其应用于名称空间,这当然是不可能的


或者,如果我足够关心这一点,我必须将类型移动到包含公共类型的命名空间中,这是唯一的选择吗?

我以前遇到过这个问题,但没有找到解决方案,只有一个在您的项目中可能行得通,也可能行不通的解决方法。您可以使用嵌套的静态类来代替定义名称空间?

这取决于您引用类库的方式:

  • 如果在解决方案中包含类库项目并使用项目引用,则通过Intellisense始终可以看到该空命名空间
  • 如果您正在引用类库的已编译dll,则在intellisense中不会出现名称空间,前提是它只包含内部成员
试试这个:

namespace ClassLibrary1
{
    namespace Internal
    {
        internal class InternalClass
        {
            public int internalStuff { get; set; }
        }
    }

    namespace Public
    {
        public class PublicClass
        {
            public int publicStuff { get; set; }
        }
    }
}

如果您通过项目引用引用它,您将看到空的命名空间。如果引用它的dll,则不会引用。

是的,我可以这样做,但随后我需要重新连接所有引用,因为嵌套类需要成为整个限定名称的一部分。例如,我需要编写以下代码:var x=new NotReallyANamespace.ClassName();而不仅仅是添加using指令+我知道,这离完美还有很长的路要走:(现在C#已经使用静态,嵌套的静态类方法变得更加可行。这有点难用谷歌搜索…对于那些想在命名空间或程序集中隐藏类的人来说,一切都在不断出现。在阅读这个答案之前,我开始在保持锁定的同时将类和内容集合组织到子文件夹中将它们放在项目的根名称空间中,但这确实让我感觉不太对劲。我肯定只能在项目引用中看到它们,所以现在我要开始在中添加子名称空间。