如何在新的Asp.Net MVC 3项目对话框中添加自定义项目模板?

6
我正在使用MEF和Asp.NET MVC 3开发基于插件的应用程序,并希望创建一个自定义项目模板,以便在为应用程序创建新插件时提供给第三方开发人员。
我可以轻松地将其导出为项目模板,但由于主机是在ASP.NET MVC 3中开发的,因此更合理的做法似乎是将其放在新的Asp.Net MVC 3项目对话框中。
有什么想法吗?
3个回答

3
经过一番查找和“反思”,我成功地在对话框中显示了一个模板。其中大部分功劳归功于这篇文章:将自定义视图引擎添加到新项目对话框中? 获取它在我的64位机器上工作的关键是该帖子中提到的注册表路径。 我还通过Reflector发现,如果需要,还有SupportsHTML5键。
这是我的模板的屏幕截图: enter image description here 这是注册表键(在MyOwnTemplate节点还有标题和描述): enter image description here

这是一个很棒的答案!一旦你找到它,它就变得非常简单 :) - Beno
谢谢,Jason。这正是我想要的。现在唯一剩下的事情就是以某种方式自动化这个过程:修改注册表键并将 .zip(模板)复制到项目模板文件夹中。 - Mehmetali Shaqiri
不要忘记运行devenv.exe /setup,以便将您的模板放入VS的项目模板缓存中。 - Jason Haley
还有一件事...如果你不想让你的模板在“新建项目”对话框中显示,那么你需要编辑你的**.vstemplate文件,在<TemplateData>标签内添加以下内容:<Hidden>true</Hidden>**。 - Mehmetali Shaqiri
你知道如何指定一个自定义图标来显示一个自定义模板吗?我尝试在.vstemplate文件中指定它,但是似乎新建MVC项目对该设置不起作用。 - Lobstrosity
看起来您无法自定义图像。对话框似乎使用存储在向导的dll中的资源之一(ico9001.ico和ico9002.ico) - 似乎图像是从模板的默认语言触发的(如果是C#,则使用第一个,否则使用第二个)。我没有看到插入自己图像的简单方法。 - Jason Haley

2
如果您在Visual Studio中查找模板目录,并检查模板:
MvcWebApplicationProjectTemplatev3.0.cs.zip (VS安装路径)\Common7\IDE\ProjectTemplates\CSharp\Web\1033
这里要看的是这行代码:
<WizardExtension>
    <Assembly>Microsoft.VisualStudio.Web.Mvc.3.0, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Assembly>
    <FullClassName>Microsoft.VisualStudio.Web.Mvc.UserInterface.MvcTemplateWizard</FullClassName>
</WizardExtension>

所以他们在这里使用了一个自定义向导。这些问题看起来很相似:
空白Asp.net MVC模板
如何编写MVC3项目模板,提供Razor或.aspx视图选项 基本上,他们说这个向导不是开源的,但你可以潜在地编写自己的自定义向导。
编辑:
以下是几个页面,告诉您如何创建自己的向导:
http://msdn.microsoft.com/en-us/library/ms185301.aspx
http://www.codeproject.com/KB/system/create_VS_wizard.aspx

1
如果您使用Reflector,您可能想查看这些方法:code://Microsoft.VisualStudio.Web.Mvc.3.01:3.1.0.0:31bf3856ad364e35/Microsoft.VisualStudio.Web.Mvc.UserInterface.ProjectTemplates/LoadProjectTemplate(Microsoft.Win32.RegistryKey,String,String):Microsoft.VisualStudio.Web.Mvc.UserInterface.ProjectTemplate - Jason Haley
和代码://Microsoft.VisualStudio.Web.Mvc.3.01:3.1.0.0:31bf3856ad364e35/Microsoft.VisualStudio.Web.Mvc.UserInterface.ProjectTemplates/LoadProjectTemplates(System.IServiceProvider,String,System.Collections.Generic.Dictionary<String,Microsoft.VisualStudio.Web.Mvc.UserInterface.ProjectTemplate>):System.Collections.Generic.Dictionary<String,Microsoft.VisualStudio.Web.Mvc.UserInterface.ProjectTemplate> - Jason Haley

2

很棒的帖子...我已经等待这篇文章有一段时间了,从你宣布要写这个主题的那一天开始 :D - Mehmetali Shaqiri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接