Пользовательский шаблон проекта Visual Studio с IWizard

#.net #visual-studio

#.net #visual-studio

Вопрос:

Я хотел бы создать пользовательский шаблон проекта с помощью мастера. В качестве идеи я взял шаблон MVC в VS. Сначала a создал шаблон для нескольких проектов и упаковал все в zip-файл с моим файлом.vstemplate

 ...
<TemplateContent>
    <ProjectCollection>
        <ProjectTemplateLink ProjectName="$safeprojectname$.DataAccess">
            DataAccessMyTemplate.vstemplate
        </ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="$safeprojectname$.Logic">
            LogicMyTemplate.vstemplate
        </ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="$safeprojectname$.Types">
            TypesMyTemplate.vstemplate
        </ProjectTemplateLink>
    </ProjectCollection>
</TemplateContent>
<WizardExtension>
    <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null</Assembly>
    <FullClassName>MyProjectWizard.WizardImplementation</FullClassName>
</WizardExtension>
  

В мастере я хотел бы выбрать тот же тип для конфигурации моего проекта, например «пустой» или «полный» и т.д.

Я не знаю, что мне делать, чтобы «удалить» ненужный проект из созданного решения или как я могу заменить конфигурацию для шаблона в методе RunStarted.

 public bool ShouldAddProjectItem(string filePath){...}
  

работает только для шаблона элемента.

Ответ №1:

Хорошо, я нашел решение. Если вам нужно что-то вроде шаблона проекта Xamarin или ASP, где пользователь может выбирать тип проекта и конфигурацию, вам необходимо создать дополнительную реализацию для интерфейса IWizard.

  1. Сначала для проекта (корневой мастер). Он будет таким же, как в файле .vstemplate. Здесь вы пишете логику для отмены, кнопки «Назад» или для названий проектов.
  2. Второй мастер для подпроектов (SubProject.vstemplate). Здесь вы можете объявить новые переменные, такие как NuGet version, из некоторого хранилища (db, file ..) и проверить, следует ли создавать этот проект для этой конфигурации или вызвать исключение отмены.