gpt4 book ai didi

vsix - 如何有选择地应用 VSTemplate?

转载 作者:行者123 更新时间:2023-12-04 00:44:37 25 4
gpt4 key购买 nike

我正在为我公司的 MVC 4 应用程序创建自定义 VSTemplate,它使用的向导与创建新 MVC4 应用程序时出现的向导相当。我有两个模板之一,我想在开发人员创建此类新应用时应用,如下所示:

VS Project Wizard

这两个条目都对应于我的 VSIX 项目中名为 ProjectTemplates 的文件夹下定义的模板:

Solution Explorer

我的问题是,如何在向导运行时应用正确的模板?我知道如何创建包含多个项目的 vstemplate(使用 vstemplate 中的 ProjectCollection 节点),但这并不是我真正想要做的,因为它们永远不会一起部署。我发现我可以将两个 vstemplates 作为 Assets 添加到我的 vsixmanifest 文件中,但我不确定如何有条件地只应用一个模板。

谢谢!

最佳答案

您需要将“可选”模板的文件包含在“根”模板文件夹的子目录中,但从 TemplateContent Element排除它们“根”模板。

你的 IWizard实现需要保留对 EnvDTE.DTE 的引用对象(RunStarted 的第一个参数)并在 ProjectFinishedGenerating 中使用它使用与用户选择相匹配的模板将项目添加到解决方案。

public class SelectTemplatesWizard : IWizard
{
private EnvDTE.DTE _dte = null;

private string _solutionDir = null;

private string _templateDir = null;

public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
// Store the reference to the environment for later use
_dte = automationObject as EnvDTE.DTE;

/*
The value of the item in the replacements dictionary for the key
$destinationdirectory$ is populated with the physical location of
the directory (named based on the user entered project name) created
sibling to the solution file.

The solution directory will be this directories parent
when the Type attribute of the VSTemplate element is ProjectGroup
*/
_solutionDir = System.IO.Path.GetDirectoryName(replacementsDictionary["$destinationdirectory$"]);

// customParams[0] is a default custom param that contains the physical location of the template that is currently being applied
_templateDir = System.IO.Path.GetDirectoryName(customParams[0] as string);
}

public void ProjectFinishedGenerating(Project project)
{
int userSelected = 1;
string name= null, projectPath= null, templatePath = null;

switch (userSelected)
{
case 0:
{
name = "Angular";
projectPath = System.IO.Path.Combine(_solutionDir, "Angular");
templatePath = System.IO.Path.Combine(_templateDir , "Angular\Angular.vstemplate");
}
break;
case 1:
{
name = "MVC4";
projectPath = System.IO.Path.Combine(_solutionDir, "MVC4");
templatePath = System.IO.Path.Combine(_templateDir , "MVC4\MVC4.vstemplate");
}
break;
}
_dte.Solution.AddFromTemplate(templatePath, projectPath, name);
}

/* Other IWizard methods excluded for brevity */
}

关于vsix - 如何有选择地应用 VSTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18663989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com