How to specify directory where the RootNamespace should be?

68 views Asked by At

If I have a project with the RootNamespace AwesomeRoot, and I want a class to be directly in that namespace, the way I've always done this is to put the class's code file directly into the project directory (not sure if I have that terminology right, but I mean the directory where the *.csproj file is). And if I want some other class to be in the namespace AwesomeRoot.PrettyGreatSubnamespace, I would put that class's code file in the PrettyGreatSubnamespace of the project directory.

Doing it this way, if there's a mismatch between the path of a class file and the namespace of that class, Visual Studio will give me an IDE0130 warning, "Namespace does not match folder structure", and furthermore offers a quick and easy automatic fix. Also, when I create a new class, VS automatically sets the namespace appropriately based on the file path.

That's all great, but what I'd really like is to have the source code based in a "Source" subdirectory of the project directory, and have code that's in that directory correspond to the RootNamespace. So I'd have AwesomeRoot classes in <project>\Source, and AwesomeRoot.PrettyGreatSubnamespace code in <project>\Source\PrettyGreatSubnamespace.

Unfortunately, if I just do that naively, VS will expect the appropriate namespaces to be AwesomeRoot.Source and AwesomeRoot.Source.PrettyGreatNamespace. I do not want this Source level in all my namespaces. Nor do I want to be constantly fighting against the IDE. Nor do I want to turn off the IDE0130 warning and the other features that enable this stuff.

I imagine that there's a way (in the project file?) to say "the base directory of the root namespace should be such-and-such", and have everything else just work the way it always has. Unfortunately, I've thus far been unable to find such a way. How can this be done? Thanks in advance.

1

There are 1 answers

1
PMF On

As stated in the comments, I don't know whether there's an option to make things work exactly the way you want them, but you can use a directory structure like this to separate code from other data:

\ (Project root)
-- Awesomeproject.sln
-- \build
-- \documentation
  -- Specification.doc
  -- Readme.txt
-- \src
  -- \AwesomeProject1
     -- AwesomeProject1.csproj
     -- \namespace1
     -- \namespace2
  -- \AwesomeLibrary1
     -- AwesomeLibrary1.csproj
     -- \namespace...
-- \bin
-- \obj

There can be any number of folders between solution and it's projects (and the projects can be spread to many folders), but not between the project file and it's subfolders.