Click here to Skip to main content
13,552,564 members
Click here to Skip to main content
Add your own
alternative version


21 bookmarked
Posted 18 Apr 2011
Licenced CPOL

Customization of Project and Item Templates in Visual Studio

, 18 Apr 2011
Rate this:
Please Sign up or sign in to vote.
How to customize project and item templates in Visual Studio.


This article explains how to customize the project and item templates in Visual Studio. The article comes in three parts. The first part explains how to customize project templates. The second part explains how to customize item templates, and the third part explains how to create text template generators for project items.

Though there are different project types of templates available in Visual Studio for different scenarios, a lot of initial designing and coding is common and has to be done for every project. To make work easier, Visual Studio provides features for customizing the project and item templates for different scenarios.

Using the code

First, we have to create a new project template.

I am creating a new project template for an ASP.NET Web Application, and adding custom parameters to be accepted from the user which will be updated in the project files at the time of creation of the project.

The following are the steps to create a new project template:

  • Create a new ASP.NET Web Application and name it MyWebTemplate.
  • Add a new folder named Views in the project.
  • Add a new .aspx page in the Views folder and name it ViewPage.aspx.
  • Add a custom parameter named $Title$ in the ViewPage.aspx file.
  • Save the Project.
  • Click Export Template in the File menu.
  • In the Export Template Wizard, select Project Template and click Next.
  • Enter Template Name and Description, select Automatically import the template into Visual Studio, and click Finish.

MyWebTemplate is copied as a .zip file.

Second, we have to create a new Custom Wizard as a Class Library project to accept user input at the time of project creation.

Here is the sample code for the Custom Wizard assembly. It contains a class named CustomWizard implementing the IWizard interface.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualStudio.TemplateWizard;
using EnvDTE;
public class CustomWizard : IWizard
   private UserInputForm inputForm;
   private string Title;

   public void BeforeOpeningFile(ProjectItem projectItem)

   public void ProjectFinishedGenerating(Project project)

   public void ProjectItemFinishedGenerating(ProjectItem

   public void RunFinished()

   public void RunStarted(object automationObject,
       Dictionary<string, string> replacementsDictionary,
       WizardRunKind runKind, object[] customParams)
           inputForm = new UserInputForm();
           Title = inputForm.get_Title();
       catch (Exception ex)

   public bool ShouldAddProjectItem(string filePath)
       return true;

The following is the sample code to accept a custom parameter from the user:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CustomWizard
   public partial class UserInputForm : Form
       private string title;

       public UserInputForm()

       public string get_Title()
           return title;

       private void button1_Click(object sender, EventArgs e)
           title = textBox1.Text;

Sign the assembly with a strong name. Install the Custom Wizard assembly into the Global Assembly Cache.

Third, we have to attach the Custom Wizard assembly to MyWebTemplate manually

To do that, edit the .vstemplate file of MyWebTemplate. Following are the steps to attach the Custom Wizard assembly:

  • Extract the file. To find the location of the file, go to Options in the Tools menu.., select Project and Solutions.., and find the location of the .zip file in the Location textbox.
  • Add the following code in the .vstemplate file from the extracted files:
  • <WizardExtension>
        <Assembly>CustomWizard, Version=, Culture=Neutral, 
  • Create a new .zip file containing the saved .vstemplate file, and delete the old file.

Finally, create a new project using the MyWebTemplate project type.

Here are the steps to create a new MyWebTemplate project:

  • Create a new project by selecting the MyWebTemplate project template. Enter the project name and click OK.
  • A UserInputForm opens. Enter title name and click Submit.
  • You can verify the title that is passed as parameter to the project and saved in the ViewPage.aspx file.


Generally, any custom code can be run during project creation. We can create configuration settings, reference assemblies required for the project, or create project item files and folders. But you can't validate user input; you have to assume the user enters the correct values during project creation.

The next part of this article explains the creation of item templates.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer
India India
I have experience in more than 10 years in microsoft technologies. Visit my blog at

You may also be interested in...

Comments and Discussions

QuestionAbout template project modify Pin
Toshihide Higashimori27-Oct-15 17:45
memberToshihide Higashimori27-Oct-15 17:45 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01-2016 | 2.8.180515.1 | Last Updated 18 Apr 2011
Article Copyright 2011 by arunsuji
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid