Changing namespace using vstemplate? - c#

I'm creating a custom project template in VS 2010, and I want to add prefix to all of these projects (it is a template for sub-projects within a solution).
So, if I create "NewProject" I want it to have the namespace "MasterSolution.NewProject".
I can manually alter the namespace within the .cs files, so if I had a Class1.cs then it says
using MasterSolution.NewProject
but intellisense only picks up "NewProject", not "MasterSolution".
Is there an entry in the .vstemplate that can alter the namespace?
Thanks

Related

How to use a "flat" namespace in whole C# project

I want to use the same namespace for my whole c# class library. But the default behavior for new files is to use a namespace like [Base namespace].[Folder 1].[Folder 2].
Is there a simple way or plugin for visual studio 2019 to make all new files use the same namespace? So just [Base namespace] whatever the folder?
But just for a single project, I don't want to change the global file templates.
Although all concerns mentioned in comments, there's simple way to achieve this. Just go to project properties and define default namespace:
Now every added class has this namespace defined:
using System;
using System.Collections.Generic;
using System.Text;
namespace MyGlobalNamespae
{
class Class1
{
}
}
I have found a workaround I'm pleased with:
I installed this nice extension Visual Studio Namespace Fixer. It allows you to define a template for your namespaces and then can apply it to all .cs, .xaml, and other files in your project.
Under Options -> Namespace Fixer options -> Use default project namespace I defined the format {projectRootNamespace} for Namespace format.
Not I just have to select my files and folders in the projects base folder (in Visual Studio, not in the windows explorer), rightclick and select Adjust namespaces and all files in all subfolders will change their namespace to the projects root namespace :-)
Awesome if you create and use a lot of class and other files in your NuGet lib.

Adding the solution name as base of namespace for all projects

So I have this solution in visual studio 2013. Currently the solution tree looks like this:
MySolution
>MyProjectA
>MyProjectB
>MyProjectC
The default is that each class in the project folder has the namespace same as the project folder name.
But I would like that each class in each project folder have a namespace that starts with the solution name. For example if there is a class named MyClass in MyProjectA I want it's namespace to be MySolution.MyProjectA
Is there a way to automatically to this in Visual Studio? I could go and change all the namespaces my self...but I rather would love to see if its possible to do this automatiaclly.
In each project's settings, there is a Default Namespace that is used whenever you add new files to a project. The default value is the project name, but you can customize it. You can change that and then any new files added will use the desired namespace.
For any existing files, a Find and Replace can provide a relatively quick cleanup (find: namespace MyProjectA -> replace with: namespace MySolution.MyProjectA, only search within current project).
Download ReSharper, it has a lot of such features. Install it, after that you just have to rename each project as MySolution.ProjectA,B,C and then right click on the project and select option refactor and then click adjust namespaces. This will do the trick, only thing I see here is that you will need to rename your projects.

The type or namespace name does not exist - folders in C#

I'm sure there is a simple solution to this problem, but it has defeated me so far. Basically all I'm trying to do is include some classes in a separate folder in my c# project.
Strangely this has been working just fine until today.
In the solution explorer I created a new folder called animations.
I added the line to the main class:
using AnimationEditor.animations; (AnimationEditor is the solution name/namespace)
which throws the error:
Error 1 The type or namespace name 'animations' does not exist in the namespace 'AnimationEditor' (are you missing an assembly reference?)
As I said, I didn't have this error before today so I am a little confused.
If you don't have the the line namespace AnimationEditor.animations in the the class you are trying to reference you need to manually add it.
Those namespace statements do not get automatically added when you move a file, they only get automatically put in when you create a new file under the folder.
So your class should look like
namespace AnimationEditor.animations
{
class MyClass
{
//snip
}
}
As a side note, the .NET naming conventions state you should use a capital letter for those sub namespaces, capitalize the folder name and it will automatically capitalize the namespace for new files (you will need to manually change existing ones, just like moving)
If you drag files to another folder (or add them) in visual studio, namespace does not change automatically (atleast in 2010). Check namespace of AnimationEditor class.

Wrong namespace when creating a new C# file?

I have two projects called Hbt.DMS.BusinessLogic and Hbt.DMS.Web . In Hbt.DMS.BusinessLogic I have a folder called Operations. When I try to create a new file inside Operations folder, it generates a wrong namespace inside the file.
ex: the generated namespace: Greenwich.DMS.Web.Operations
expected namespace: Greenwich.DMS.BusinessLogic.Operations
I noticed that this happens when I try to create new files in any folder in Hbt.DMS.BusinessLogic project.
What am I missing?
Make sure you have the correct Default namespace in the Project Properties (e.g. Greenwich.DMS.BusinessLogic). The visible name of the project does not necessarily have to be the same as the default namespace.

Type or namespace could not be found from App_code folder

I have written a class called ArchivedFilesWrapper in the App_code folder of my project, however when I use this class in another file in a different folder i get error:
The type or namespace name 'ArchivedFilesWrapper' could not be found (are you missing a using directive or an assembly reference?)
I thought every page should be able to find classes that are contained within the same project, but I guess this is not the case. Can someone please tell me what using statement I need to have?
Here is a snippet from my class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace EMCWebAdmin.App_Code
{
public class ArchivedFilesWrapper
{
Perhaps the problem will be solved by changing the Build Action Property of the *.cs source file to Compile from Content. From the Solution Explorer right click on the source file and choose Property.
Note that the App_Code folder is intended for use in Web Site Projects.
Note that for a Web Application Project or MVC project, adding an App_Code folder to your project and putting *.cs files in it will cause problems. I ignorantly added an App_Code folder to my MVC project from the Solution Explorer. VS defaulted the name space to MyProjectName.App_Code. In this case Visual Studio 2012 defaulted the Build Action to Content, even though the type was .cs code. After I changed Build Action Property of the *.cs source file to Compile from Content the namespace was resolved in other folder locations of the project. However because of problems, I had to change the name of folder--see below.
Important
In the MVC or Web Application project, the App_Code folder is trouble because it has Web Site Project type semantics. This folder is compiled when published (deployed) to the server. By changing Build Action from Content to Compile, you resolve the namespace issue on your development environment by forcing immediate compilation, but you get trouble when the second compilation results in objects defined twice errors on deployment. Put the code files in a folder with a different name. If you converted a Web Site to a Web Application, see the guidelines on the Net for this--not in the scope of this question. To read more about App_Code folder in the different project types see this blog
You need to add
using EMCWebAdmin.App_Code;
to all the pages you want to be able to use the class.
Alternatively you change the namesspace that the class is in to the same one that all the web pages use which presuming it is EMCWebAdmin
then in your class change
namespace EMCWebAdmin.App_Code
{
...
to
namespace EMCWebAdmin
{
...
This is a feature of visual studio, if you create a class in a folder structure, it uses a namespace that follows the folder structure.
If you convert it to a web app it should work. The downside is that it will no longer autobuild your code in app_code folder every time you change it and spin up the app. I have never seen a professional developer use a website project. I have no idea who MS were targeting when they created them.
Yes, put the calsses to another folder(not asp.net special folder), and only use the main namespace for the application is solve this issue.
Thanks johnmcp.

Categories