Multi-Project Visual Studio Template Tricks

I’ve been knee-deep in Visual Studio project and item templates since the first version of Visual Studio, but this was the first time I needed to create a template that added multiple projects to a single solution…specifically, I wanted to create a better template for a Silverlight RIA client and associated Web host. This MSDN topic is a great place to start:


http://msdn.microsoft.com/en-us/library/ms185308.aspx


There were two situations this topic didn’t cover. The first, was:


How do you specify which of the two projects is the Startup Project?
After a bit of trial and error, I discovered that the project listed first in the <ProjectCollection> element is set to the Startup Project by default. So, in the following example, My Windows Application would be set as the Startup Project


            <ProjectTemplateLink ProjectName=”My Windows Application”>
                WindowsApp\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName=”My Class Library”>
                ClassLib\MyTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>

How can I pass a customer parameter value to my sub projects?
This one took a little more trial and error. I found a post in a forum by a Microsoft tech support person that said you can’t pass the vaue of custom parameters to sub projects by declaring the custom parameter in the root vstemplate file (I tried this and they were right!). However, I was able to get around this limitation by making use of a static variable. Here are my steps:


1. I created a custom Wizard Extension that collected a value from the user and stored the value in a static variable of that wizard class. If you’re not familiar with Wizard Extensions, check out this topic: http://msdn.microsoft.com/en-us/library/ms185301.aspx


2. I declared the same Wizard Extension class for each of my subprojects. In all three templates (the root template and the subprojects) I declared a <WizardData> element that passes data to my custom wizard. This allows me to specify in the template that a project is a main project or sub project. If you’re not familiar with the WizardData element, check out this link: http://msdn.microsoft.com/en-us/library/ms171415.aspx


3. In the sub projects, I checked the value of the static variable and, voila! It was available to my subprojects.

I hope this post helps out anyone who is looking to make the most of multi-project Visual Studio templates!


Best Regards,
Kevin McNeish
INETA Speaker
President, Oak Leaf Enterprises, Inc.
Home of the MM .NET Framework
www.oakleafsd.com


 

3 thoughts on “Multi-Project Visual Studio Template Tricks”

  1. Have you ever considered to supply code? I mean:
    * How do you ‘collect a value’?
    * How do you check static variable types?

  2. Hi Kevin,

    If am listing my project at first to be the start up project then project build order getting failed and my solution is not building. Please suggest.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>