Add solution folder to visual studio project template

Can I add solution folders with a project template? If it is not built into functionality, is it possible to create a custom task for it?

+3
source share
5 answers

This is a bit complicated. You cannot do this with a simple project template. Project templates can only work on one project level. To implement more complex logic, you need to implement WizardExtension and register it in .vstemplateyour template file .

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

You can find more about the wizard extensions on MSDN .

+2
source

, msdn .

+1

. , , .

, 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

<SolutionFolder>...</SolutionFolder> .vstemplate.

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

: SolutionFolder

0

(. ):

        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;

-3

Source: https://habr.com/ru/post/1538574/


All Articles