2015-01-21 7 views
5

Czy mogę utworzyć szablon przedmiotu, który wstawi wiele plików do różnych projektów w ramach tego samego rozwiązania?Szablon wielu elementów w wielu projektach

Nie chcę dodawać plików w różnych folderach w tym samym projekcie.

To co szukam:

Rozwiązanie

  • Projekt 1

    • element szablonu 1
  • Projekt 2

    • poz Szablon 2
+0

Nie jestem pewien, jak to zadziała. W jaki sposób szablon będzie wiedział o tym, którego projektu użyć dla przedmiotu 2? –

+0

Mogę po prostu być na stałe, ale to właśnie próbuję sprawdzić, czy to możliwe, czy nie. – Eccentrikit

+0

Poszukuję również odpowiedzi na to pytanie. –

Odpowiedz

0

Ok podstawie VS 2017 I stworzył jedną VSIX projektu jeden Library Project i jeden element szablonu projektu

1- W projekcie szablonu Element tworzę zarówno pliki szablonu elementu jeden i dwa. Dodałem również informacje o wizycie rozszerzonej w pliku vstemplate, takim jak ten WizardInementation, to mój projekt biblioteki klas.

2- Dodałem TemplateWizardInterface Nuget Package do biblioteki klas Project i implementuję IWizard w klasie. W ProjectItemFinishedGenerating przenoszę drugi element szablonu, taki jak plik, do drugiego folderu lokalizacji projektu i dodam go do projektu programowo za pomocą Microsoft.Build.Evaluation.ProjectCollection w 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"); 
        } 
       } 
      } 
     } 

więcej informacji o IWizard spojrzeć na ten link https://msdn.microsoft.com/en-us/library/ms185301.aspx

3- W projekcie VSIX dodałem biblioteki klas I stworzył w drugim etapie do aktywów według rodzaju montażu w vsixmanifest. Dodałem także projekt szablonu elementu jako plik i przekazuję plik zip utworzony przez VS po kompilacji projektu elementu w koszu.