3

是否可以使用项目模板添加解决方案文件夹?如果它不是内置功能,是否可以为此创建自定义任务?

4

5 回答 5

2

这有点棘手。您无法使用简单的项目模板执行此操作。项目模板只能在单个项目级别上运行。要实现更高级的逻辑,您需要实现WizardExtension并将其注册到.vstemplate模板的文件中。

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

您可以在MSDN上找到有关向导扩展的更多信息。

于 2012-02-09T08:52:11.500 回答
1

有可能,您可以查看此msdn网站。或者对于总体概述

于 2012-02-09T08:38:01.800 回答
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;
}
于 2015-06-16T21:49:51.610 回答
0

只需简单地添加<SolutionFolder>...</SolutionFolder>.vstemplate 文件

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

参考:SolutionFolder

于 2019-06-13T19:28:17.907 回答
-3

我在我的项目模板向导中使用了以下片段(请参阅 Mike Chaliy 的回答):

        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;

于 2012-03-14T16:48:34.470 回答