Добавить папку решения в шаблон проекта Visual Studio - PullRequest
3 голосов
/ 09 февраля 2012

Возможно ли добавить решение папки с шаблоном проекта?Если это не встроенный функционал, возможно ли создать для этого пользовательское задание?

Ответы [ 5 ]

2 голосов
/ 09 февраля 2012

Это немного сложно.Вы не можете сделать это с помощью простого шаблона проекта.Шаблоны проектов могут работать только на одном уровне проекта.Чтобы реализовать более продвинутую логику, вам нужно реализовать WizardExtension и зарегистрировать его в файле .vstemplate вашего шаблона.

<WizardExtension>
    <Assembly>AssemblyInGACWithSomeLogic</Assembly>
    <FullClassName>MySuperWizardExtension</FullClassName>
</WizardExtension> 

Подробнее о расширениях мастера можно узнать в MSDN.

1 голос
/ 17 июня 2015

Вы можете сделать это с помощью мастеров шаблонов. Я думаю, что вы уже знаете, как это реализовать.

Итак, внутри метода RunFinished напишите эти строки:

    var destFolder = Directory.GetParent(path).Parent;
    System.IO.Directory.CreateDirectory(destFolder.FullName + "\\.nuget");
    ((Solution2) _dte.Solution).AddSolutionFolder(destFolder.FullName + "\\.nuget");

Для класса Solution2 вы должны ссылаться на EnvDTE80.dll. _dte должен быть установлен из метода RunStarted.

private DTE _dte;
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
     _dte = (DTE)automationObject;
}
1 голос
/ 09 февраля 2012

Возможно, как вы можете проверить этот MSDN веб-сайт.Или для общего обзора

0 голосов
/ 13 июня 2019

Просто добавьте <SolutionFolder>...</SolutionFolder> в файл .vstemplate

<SolutionFolder Name="Math Classes">
        <ProjectTemplateLink ProjectName="MyFolder1">
            3rdpartyProj\MyTemplate.vstemplate
        </ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="MyFolder2">
            3rdpartyProj\MyTemplate.vstemplate
        </ProjectTemplateLink>
    </SolutionFolder>

Ссылки: SolutionFolder

0 голосов
/ 14 марта 2012

Я использую следующие фрагменты в мастере шаблонов проектов (см. Ответ Майка Чалий):

        private static SolutionFolder GetSolutionFolder(Solution2 solution) {
        var project = GetSolutionFolderProject(solution);
        return (SolutionFolder) project.Object;
    }

    private static Project GetSolutionFolderProject(Solution2 solution) {
        var project =
            solution.Projects.Cast<Project>().FirstOrDefault(p => p.Name == "Solution Items");
        if (project == null) project = solution.AddSolutionFolder("Solution Items");
        return project;
    }

, где _solution = (Solution2) _dte.Solution;

...