2009-06-29 4 views
14

Sto provando a creare un modello multiprogetto. Vorrei che i nomi dei progetti secondari contengano il nome della soluzione. Ho provato quanto segue, tuttavia $ safeprojectName $ non funziona nel modello root per qualche motivo. Prova a creare le cartelle con $ safeprojectName $ nel nome anziché nel nome del progetto effettivo.Quando si crea un modello di progetto multiplo per Visual Studio esiste un modo per utilizzare i parametri nel file modello radice?

<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> 

mi hanno fatto un sacco di lettura su questo e avere e hanno creato un assieme utilizzando l'interfaccia iWizard che crea un parametro $ NomeSoluzione $. Ho quindi utilizzato il seguente modello.

<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> 

Questo però fallisce anche con lo stesso problema. Sto cercando di fare l'impossibile? Qualsiasi aiuto su questo sarebbe molto gradito.

risposta

2

Si consiglia di esaminare il Guidance Automation Toolkit. C'è una buona dose da digerire, ma una parte di ciò che può fare è mettere un'interfaccia utente guidata su un modello multiprogetto.

Se si desidera vedere un esempio di questo, dare un'occhiata allo Service Factory, che può creare un'intera struttura di soluzione basata in parte su una procedura guidata.

1

Sì, è necessario utilizzare un dizionario statica nella procedura guidata di modello di radice, che sarà utilizzata dalla realizzazione guidata di template figli: implementazione

iWizard nel Modello di radice

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; 

Puoi ottenere l'esempio completo implementato qui: Multi-Project Templates with Wizard: Visual Studio 2010 Sample

+0

Esecuzione di quel progetto in Debug BSOD'd my VS 2010 SP 1 –

+0

Ciò non aiuta a ottenere cartelle di soluzioni con nomi parametrizzati. – Vaccano

4

A partire da Visual Studio 2013 Update 2 è ora possibile utilizzare l'attributo CopyParameters nell'elemento ProjectTemplateLink nel file radice .vstemplate. Tutti i parametri definiti nel modello radice saranno disponibili nei modelli collegati con un prefisso "ext_".

Ad esempio, se il modello radice definisce un parametro, $ Foo $, il parametro $ ext_Foo $ sarà disponibile nei progetti collegati con lo stesso valore.

Vedere http://msdn.microsoft.com/en-us/library/ms171398.aspx per ulteriori dettagli.