This documentation is archived and is not being maintained.

How to: Programmatically Create Projects 

To create projects you first call GetProjectTemplate, and you then pass the returned template paths to AddFromTemplate.

Project templates with a .vstemplate extension and are stored in .zip files. To obtain the path to the .vstemplate file (inside the .zip file), you use GetProjectTemplate, which you then pass to AddFromTemplate to create the project (as well as a solution, if one is not already open). You can perform this operation as many times as required, and each project will be added to the currently open solution.

The project templates for all the languages can be found at <drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language.

You can also create your own custom project templates. To specify the directory in which you will store your templates, click Options on the Tools menu. On the left pane of the Options dialog box, click Projects and Solutions. Type the path for your templates in the Visual Studio user project templates location box. Alternatively, you can accept the default location.

Custom project templates require unique file names that do not conflict with the file names defined in: <drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language.

Ensure that you use long file names (as opposed to 8dot3). For more information, see Creating Project and Item Templates.


The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. These procedures were developed with the General Development Settings active. To change your settings, choose Import and Export Settings on the Tools menu. For more information, see Visual Studio Settings.

Creating a New Project

To programmatically create a project

  1. Start Visual Studio and create a new Visual Studio add-in project.

  2. Add the code below to the add-in's Connect class.

  3. Run the add-in project and activate it in the Add-In Manager.

    To do this, click Add-In Manager on the Tools menu and then check the box next to the add-in to activate it.


The following example uses GetProjectTemplate and AddFromTemplate to create two new console projects, one Visual Basic and the other Visual C#, in a solution.

public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;

public void createProjectsFromTemplates(DTE2 dte)
        // Create a solution with two projects in it, based on project 
        // templates.
        Solution2 soln = (Solution2)dte.Solution;
        string csTemplatePath;
        string vbTemplatePath;
        string csPrjPath = "C:\\UserFiles\\kempb\\addins\\MyCSProject";
        string vbPrjPath = "C:\\UserFiles\\kempb\\addins\\MyVBProject";
        // Get the project template path for a C# console project.
        // Console Application is the template name that appears in 
        // the right pane. "CSharp" is the Language(vstemplate) as seen 
        // in the registry.
        csTemplatePath = soln.GetProjectTemplate("", 
        System.Windows.Forms.MessageBox.Show("C# template path: " + 
        // Get the project template path for a Visual Basic console
        // project.
        // "vbproj: is the DefaultProjectExtension as seen in the 
        // registry.
        vbTemplatePath = soln.GetProjectTemplate("", 
        System.Windows.Forms.MessageBox.Show("Visual Basic template path: " + 
        // Create a new C# console project using the template obtained 
        // above.
        soln.AddFromTemplate(csTemplatePath, csPrjPath, "New CSharp 
          Console Project", false);
        // Create a new Visual Basic console project using the template 
        // obtained above.
        soln.AddFromTemplate(vbTemplatePath, vbPrjPath, "New VB Console 
          Project", false);
    catch (System.Exception ex)
        System.Windows.Forms.MessageBox.Show("ERROR: " + ex.Message);

See Also