Visual Studio Templates – Add New Item to project


Using Visual Studio to write code requires creating a project (well, you can use Visual Studio without a project, but you won’t get very much past Notepad functionality – there’s not even Intellisense on files) . After creating / opening an existing project, we can add new files (classes, class diagrams, XML files etc) by selecting the Project menu, then Add New Item (or add Class / Windows Forms / Windows Component or User Control, if this is what you need). After you specify all the details (file name), a file is added with some default text in it. Assuming you have Visual Studio 2008 SP1 installed, the templates that generate this text are stored at %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates  and %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplatesCache (for x64 machines, look in % ProgramFiles(x86)%).


Let’s add a new C# class, Tester, to the class library project SimpleTests. By default, in Visual Studio 2008 it will contain the following text:


 



using System;


using System.Collections.Generic;


using System.Linq;


using System.Text;


 


namespace SimpleTests


{


    class Tester


    {


    }


}


 


This text comes from the Class template. If we look in the ProjectTemplateCache folder, inside CSharp (the language we used to add the class) -> Code -> 1033 -> Class.zip, we find a class.cs looking like this:


 



using System;


using System.Collections.Generic;


$if$ ($targetframeworkversion$ == 3.5)using System.Linq;


$endif$using System.Text;


 


namespace $rootnamespace$


{


      class $safeitemrootname$


      {


      }


}


 


This explains the text we get. But how can we customize the default? I really would appreciate some changes:


-          I don’t want all these usings added by default – I prefer to start without any using statement, and to add them while the code requires them. Of course, I could do it the other way around: add all the usings I think I may need; when I am done coding, remove the unused ones. Visual Studio lets you do that easily by right clicking on the page, selecting Organize Usings -> Remove Unused Usings (or Remove and Sort).


-          Second, I prefer Usings inside the namespace declaration and I want to add a header to the file.


I can change the Class.cs file and replace the Class.zip in ProjectTemplatesCache folder:


 



//------------------------------------------------------------


// Copyright (c) Oana Platon


//------------------------------------------------------------


 


namespace $rootnamespace$


{


    using System;


   


    class $safeitemrootname$


    {


    }


}


 


Then when I reopen Visual Studio and Add a class, I get this file:


 



//------------------------------------------------------------


// Copyright (c) Oana Platon


//------------------------------------------------------------


 


namespace SimpleTests


{


    using System;


 


    class MyCustomizedTester


    {


    }


}


 


Cool, right?


This change will be lost the first time when devenv /installvstemplates command is called (this command replaces the ItemTemplatesCache folder with what finds in ItemTemplates folder). To make it permanent, make the change in ItemTemplates folder instead and run devenv /installvstemplates to propagate the change to ItemTemplatesCache.

Comments (2)

  1. sduren says:

    Very helpful!

    Works for commonly used references, too, which can be added to the .csproj file, so that you don’t have to choose "Add Reference" every time you create a new project.

  2. Pradeep says:

    Thanks for the article.

    It got the task done in a couple of minutes.

    The below mentioned link has entries for all supported template parameters.

    msdn.microsoft.com/…/eehb4faa(VS.80).aspx

Skip to main content