将解决方案文件夹添加到visual studio项目模板

时间:2012-02-09 08:31:48

标签: c# visual-studio-2010 project-template

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

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

有可能,您可以查看此msdn网站。 或者total overview

答案 2 :(得分: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。 必须从RunStarted方法设置_dte。

private DTE _dte;
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
     _dte = (DTE)automationObject;
}

答案 3 :(得分:0)

只需在.vstemplate文件中添加<SolutionFolder>...</SolutionFolder>

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

参考:SolutionFolder

答案 4 :(得分:-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;