2009-06-29 8 views
14

Ich versuche, eine Multiprojektvorlage zu erstellen. Ich möchte, dass die Namen der Unterprojekte den Lösungsnamen enthalten. Ich habe Folgendes versucht, aber $ saveprojectName $ funktioniert aus irgendeinem Grund nicht in der Root-Vorlage. Es versucht, die Ordner mit $ saveprojectName $ im Namen und nicht den tatsächlichen Projektnamen zu erstellen.Beim Erstellen einer Vorlage für mehrere Projekte für Visual Studio gibt es eine Möglichkeit, Parameter in der Stammvorlagendatei zu verwenden?

<VSTemplate Version="2.0.0" Type="ProjectGroup" 
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> 
    <TemplateData> 
    <Name>Default Solution</Name> 
    <Description>An example of a multi-project template</Description> 
    <Icon>Icon.ico</Icon> 
    <ProjectType>CSharp</ProjectType> 
    </TemplateData> 
    <TemplateContent> 
    <ProjectCollection> 
     <SolutionFolder Name="$safeprojectName$.Web"> 
     <ProjectTemplateLink ProjectName="$safeprojectName$.Web"> 
      Src\Web\MyTemplate.vstemplate 
     </ProjectTemplateLink> 
     </SolutionFolder> 
    </ProjectCollection> 
    </TemplateContent> 
</VSTemplate> 

Ich habe viel zu lesen über das getan und haben und haben eine Baugruppe mit der IWizard Schnittstelle geschaffen, die einen Parameter $ $ Solution erstellt. Ich habe dann die folgende Vorlage verwendet.

<VSTemplate Version="2.0.0" Type="ProjectGroup" 
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> 
    <TemplateData> 
    <Name>Default Solution</Name> 
    <Description>An example of a multi-project template</Description> 
    <Icon>Icon.ico</Icon> 
    <ProjectType>CSharp</ProjectType> 
    </TemplateData> 
    <TemplateContent> 
    <ProjectCollection> 
     <SolutionFolder Name="$solutionName$.Web"> 
     <ProjectTemplateLink ProjectName="$solutionName$.Web"> 
      Src\Web\MyTemplate.vstemplate 
     </ProjectTemplateLink> 
     </SolutionFolder> 
    </ProjectCollection> 
    </TemplateContent> 
    <WizardExtension> 
    <Assembly>DefaultSoloutionWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=f753ddb61a28cb36, processorArchitecture=MSIL</Assembly> 
    <FullClassName>DefaultSoloutionWizard.WizardImplementation</FullClassName> 
    </WizardExtension> 
</VSTemplate> 

Dies scheitert jedoch auch mit dem gleichen Problem. Ich versuche das Unmögliche zu machen? Jede Hilfe dazu wäre sehr willkommen.

Antwort

2

Sie können in die Guidance Automation Toolkit suchen. Es gibt eine Menge zu verdauen, aber ein Teil von dem, was es tun kann, ist eine Wizard-basierte UI auf eine Multi-Projekt-Vorlage.

Wenn Sie ein Beispiel dafür sehen möchten, werfen Sie einen Blick auf die Service Factory, die eine vollständige Lösungsstruktur basierend teilweise auf einem Assistenten erstellen kann.

1

Ja, benötigen Sie ein statisches Wörterbuch im Assistenten von Root-Template zu verwenden, die vom Assistenten Implementierung von Kindern Vorlagen verwendet werden:

IWizard Implementierung in Root-Template

public void RunStarted(object automationObject, 
     Dictionary<string, string> replacementsDictionary, 
     WizardRunKind runKind, object[] customParams) 
    { 
     try 
     { 
      // Display a form to the user. The form collects 
      // input for the custom message. 
      inputForm = new UserInputForm(); 
      inputForm.ShowDialog(); 

      customMessage = inputForm.get_CustomMessage(); 

      // Add custom parameters. 
      replacementsDictionary.Add("$custommessage$", 
       customMessage); 
      globalDictionary = new Dictionary<string, string>(); 
      globalDictionary.Add("$custommessage$", 
       customMessage); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 

    public static Dictionary<string, string> globalDictionary; 

können Sie Hier finden Sie das vollständige Beispiel: Multi-Project Templates with Wizard: Visual Studio 2010 Sample

+0

Ausführen dieses Projekts in Debug BSOD mein VS 2010 SP 1 –

+0

Dies hilft nicht, Lösungsmappen mit parametrisierten Namen zu erhalten. – Vaccano

4

Ab Visual Studio 2013 Update 2 können Sie jetzt das CopyParameters-Attribut für das Element ProjectTemplateLink in der Stammdatei .vstplate verwenden. Alle in der Stammvorlage definierten Parameter sind in den verknüpften Vorlagen mit einem Präfix "ext_" verfügbar.

Wenn beispielsweise die Stammvorlage einen Parameter $ Foo $ definiert, dann ist der Parameter $ ext_Foo $ in den verknüpften Projekten mit demselben Wert verfügbar.

Weitere Einzelheiten finden Sie unter http://msdn.microsoft.com/en-us/library/ms171398.aspx.

Verwandte Themen