views:

143

answers:

4

Is there a way to reference a namespace globally across the whole solution?

So instead of having these lines in every code file:

using System;
using MyNamespace;

having to declare them only once, and every code file would use them.

Btw I am using Visual Studio.

+4  A: 

No, this is not possible.

If you're using ReSharper, you can set an option to include specific using directives in every new file you create though.

Philippe Leybaert
+4  A: 

No, C# doesn't have this concept. Each source file is independent in this respect. (And if the using directives are in a namespace declaration, those are independent from other using directives in peer namespace declarations, too. That's a pretty rare case though in my experience.)

You don't need ReSharper to change what gets included in a new class though. You can use the Visual Studio templates.

EDIT: Just to clarify the point about using directives within namespaces, suppose we had (all in one file):

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
}

Usually I only have one namespace declaration in a file, and put all the using directives before it.

Jon Skeet
You're amazing. Every time I see (or post) an answer that looks complete and final to me, you come up with something better :)
Philippe Leybaert
Thanks Jon. In your 3rd sentence do you mean, if you have namespace declaration inside another namespace (CustomNS), and if you use the CustomNS, those namespaces wouldn't be included for a file that uses that namespace?
Joan Venge
I'll edit my answer to elaborate.
Jon Skeet
Thanks Jon. What about adding "using X;" inside namespace Y? I actually tried but it didn't give me access to what's inside Bar (which is included in X).
Joan Venge
No, it wouldn't. A using directive only affects the look-up for source code within that namespace declaration (or the whole file if it's at the top). It doesn't embed that lookup into the generated code or anything like that.
Jon Skeet
+2  A: 

From this SO question and follow-up blog post. You can edit the Visual Studio default templates.

To do this, look at the file in this zip : [Program Files][Visual Studio]\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class.zip

and modify the Class.cs file as needed. Additionally, Visual Studio may have cached this file here : [Program Files][Visual Studio]\Common7\IDE\ItemTemplatesCache\CSharp\Code\1033\Class.zip

Timothy Carter
A: 

As others have mentioned Visual Studio Templates are the way to go.

Note that simply adding a using statement to your template will not ensure that the compiler can resolve your types. So, if you are adding a using statement for MyNamespace in every class you may need to add an assembly reference to your project as well. See the C# FAQ for more information.

Tuzo