2015-01-21 15 views
5

Posso creare un modello di articolo che inserirà più file in progetti diversi con la stessa soluzione?Modello di elemento di file multipli in più progetti

NON sto cercando di aggiungere file in cartelle diverse nello stesso progetto.

Questo è quello che sto cercando:

Soluzione

  • Progetto 1

    • voce MODELLO 1
  • Progetto 2

    • voce MODELLO 2
+0

Non sono sicuro di come funzionerà. In che modo il modello sarà a conoscenza del progetto da utilizzare per l'elemento 2? –

+0

Potrebbe essere solo hardcoded, ma è quello che sto cercando di scoprire se è possibile o no. – Eccentrikit

+0

Sto anche cercando la risposta a questa domanda. –

risposta

0

Ok base a VS 2017 ho creato un progetto VSIX un Progetto Biblioteche e un oggetto modello di progetto

1- In progetto modello dell'oggetto creo entrambi i file modello di elemento uno e due. Ho anche aggiunto informazioni wizardExtension nel file di vstemplate come questo

<TemplateContent> 
    <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$Service.cs">Service.cs</ProjectItem> 
    <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$DTO.cs">DTO.cs</ProjectItem> 
    <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$Message.cs">Message.cs</ProjectItem> 
    </TemplateContent> 
    <WizardExtension> 
    <Assembly>WizardImplementation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly> 
    <FullClassName>WizardImplementation.WizardImplementation</FullClassName> 
    </WizardExtension> 

WizardImplementation è il mio progetto di libreria di classi.

2- Ho aggiunto TemplateWizardInterface Nuget Package al progetto Class Library e implementato IWizard in una classe. In ProjectItemFinishedGenerating Sto spostando il secondo elemento del modello come un file nella seconda cartella di ubicazione del progetto e lo aggiungo al progetto a livello di programmazione utilizzando Microsoft.Build.Evaluation.ProjectCollection in Microsoft.Build dll.

public void ProjectItemFinishedGenerating(ProjectItem projectItem) 
     { 
      if (projectItem.FileNames[0].Contains("DTO") || projectItem.FileNames[0].Contains("Message")) 
      { 
       string newPath = Path.GetFullPath(Path.Combine(projectItem.FileNames[0], @"..\Project2\")); 
       if (!Directory.Exists(newPath)) 
       { 
        MessageBox.Show($"Message path does not exist. \r\n {newPath}"); 
       } 
       else 
       { 
        var newFullPath = Path.Combine(newPath, projectItem.Name); 
        File.Move(projectItem.FileNames[0], newFullPath); 
        var p = Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.GetLoadedProjects(PathInformation.MessageProjectPath).FirstOrDefault(); 
        if (p == null) 
         p = new Microsoft.Build.Evaluation.Project(PathInformation.MessageProjectPath); 

        var res = p.AddItem("Compile", newFullPath); 
        p.Save(); 
        if(res == null) 
        { 
         MessageBox.Show("Nothing added to project"); 
        } 
        else 
        { 
         MessageBox.Show($"{res.Count()} item added to project"); 
        } 
       } 
      } 
     } 

per ulteriori informazioni su iWizard un'occhiata a questo link https://msdn.microsoft.com/en-us/library/ms185301.aspx

3- Nel progetto VSIX ho aggiunto la libreria di classi che ho creato nel secondo passaggio al Patrimonio per tipo di Assemblea in vsixmanifest. Inoltre ho aggiunto il progetto modello oggetto come file e fornito il file zip creato da VS dopo la creazione del progetto oggetto in bin.

Problemi correlati