Есть ли способ добавить условия в vsTemplates? или способ создания выходных проектов на основе выбора пользователя - PullRequest
1 голос
/ 19 февраля 2020

У меня есть требование для создания шаблона пользовательских проектов. Я показываю мастер (используя проект vsix) пользователю, у которого есть три флажка, в которых пользователь может выбрать один или несколько из них, в зависимости от выбора количества проектов, которые необходимо создать.

Предположим, пользователь выберите один, тогда выходное решение должно иметь один проект. Предположим, что пользователь выбирает любые два, тогда выходное решение должно иметь эти два проекта.

В настоящее время, независимо от выбора, создаются три выходных проекта. Файл root vsTemplate выглядит следующим образом: Есть ли способ выполнить мое требование?

<ProjectCollection>
      <ProjectTemplateLink ProjectName="Cat">
        CatProject\Cat.vstemplate
      </ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="Dog">
        DogProject\Dog.vstemplate
      </ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="Lion">
        LionProject\Lion.vstemplate
      </ProjectTemplateLink>
</ProjectCollection>

Я попробовал два способа сделать это 1) Во время выполнения измените файл root vsTemplate соответственно, но всегда Выходной проект создается на основе файла vsTemplate, который уже находится в папке zip в каталоге bin. 2) использование объекта автоматизации среды средства разработки, программное добавление или удаление проектов в методе ProjectItemFinished интерфейса IWizard, пример: Dte.Solution.AddFromTemplate (vsTemplatePath, NewProjectName) В приведенной выше строке создается новый проект, но структура папок пропущена, и это сложно настроить его.

Есть ли простой способ сделать это?

<ProjectCollection>
      if(cat is selected)
      <ProjectTemplateLink ProjectName="Cat">
        CatProject\Cat.vstemplate
       </ProjectTemplateLink>
        end if
      if(Dog is selected)
      <ProjectTemplateLink ProjectName="Dog">
        DogProject\Dog.vstemplate
      </ProjectTemplateLink>
      end if
      if(Lion is selected)
      <ProjectTemplateLink ProjectName="Lion">
        LionProject\Lion.vstemplate
      </ProjectTemplateLink>
      end if
</ProjectCollection>

1 Ответ

1 голос
/ 21 февраля 2020

Я заставил это работать, используя второй подход, который я попробовал. Вот полное решение. Помните, что когда мы добавляем новый файл vstemplate в проект, тип действия сборки должен быть «vstemplate», чтобы soln.GetProjectTemplate указывал на поиск типа файла vstemplate, в противном случае он может выдать ошибку.

Таким образом, мы можем условно создавать проекты.

enter image description here

 using EnvDTE;
  using EnvDTE80;  

  DTE dte;

public void ProjectFinishedGenerating(Project project)
        {
            //Accessing DTE(Development tool environment) object should only be done on main thread, otherwise throw exception
            ThreadHelper.ThrowIfNotOnUIThread();
            Solution2 soln = (Solution2)dte.Solution;
            if (firstForm.IsCatSelected)
            {                
                dte.Solution.AddFromTemplate(soln.GetProjectTemplate("Cat.vstemplate", "CSharp"), destinationDirectory + "\\Cat", "Cat");               
            }
            if (firstForm.IsDogSelected)
            {
                dte.Solution.AddFromTemplate(soln.GetProjectTemplate("Dog.vstemplate", "CSharp"), destinationDirectory + "\\Dog", "Dog");
            }
        }

public void RunStarted(object automationObject,
            Dictionary<string, string> replacementsDictionary,
            WizardRunKind runKind, object[] customParams)
        {
            //Accessing DTE(Development tool environment) object should only be done on main thread, otherwise throw exception
            ThreadHelper.ThrowIfNotOnUIThread();
            destinationDirectory = replacementsDictionary["$destinationdirectory$"];

            dte = automationObject as DTE;
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...