Hiding namespaces containing only internal types in a class library?

Solution 1:

It depends on how you're referencing your class library:

  • If you have the class library project contained within your solution and use a project reference, you'll always see that empty namespace via Intellisense.
  • If you're referencing a compiled dll of your class library, you won't see the namespace popping up in intellisense, provided it contains only internal members.

Try this:

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

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

If you reference this via a project reference, you'll see the empty namespace. If you reference a dll of it, you won't.

Solution 2:

I've come up against this before and found no solution, only a workaround which may or may not work in your project. Instead of defining a namespace you could use an nested static class?