编辑:由于对先前提出的解决方案的原始请求和行为的误解而修改了答案。
要设置自定义 MVC 项目模板的启动操作,您需要创建一个带有实现Microsoft.VisualStudio.TemplateWizard.IWizard
接口的类的 dll。要使用向导 dll,您需要将其复制到 Visual Studio 的探测路径,即 (VS2010 Install Dir)\Common7\IDE、(VS2010 Install Dir)\Common7\IDE\PrivateAssemblies,或 (VS2010 Install Dir) \Common7\IDE\PublicAssemblies。如果您不将编译后的 dll 放在其中一个目录中,则需要对 dll 进行强名称和签名并将其添加到 GAC 并获取 dll 的 publickeytoken 并将其添加到 vstemplate 文件中的 Assembly 元素.
在测试以下代码时,我将 dll 复制到 (VS2010 Install Dir)\Common7\IDE\PrivateAssemblies,因此 dll 没有签名。
向导代码
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using EnvDTE;
using Microsoft.VisualStudio.TemplateWizard;
namespace WarrenG.StartAction {
public class Wizard : IWizard {
private readonly Dictionary<string, object> data = new Dictionary<string, object>();
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary,
WizardRunKind runKind, object[] customParams) {
if (replacementsDictionary.ContainsKey("$wizarddata$")) {
string xml = replacementsDictionary["$wizarddata$"];
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlNode node in doc.ChildNodes) {
data.Add(node.Name, node.InnerText);
}
}
}
public bool ShouldAddProjectItem(string filePath) {
return true;
}
public void RunFinished() {
}
public void BeforeOpeningFile(ProjectItem projectItem) {
}
public void ProjectItemFinishedGenerating(ProjectItem projectItem) {
}
public void ProjectFinishedGenerating(Project project) {
if (data.ContainsKey("WebApplication.DebugStartAction")) {
project.Properties.Item("WebApplication.DebugStartAction").Value =
data["WebApplication.DebugStartAction"];
} else {
project.Properties.Item("WebApplication.DebugStartAction").Value = 1;
}
}
}
}
将向导特定元素添加到自定义 MVC 项目模板的 vstemplate 文件
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateContent>
<!-- various template content -->
</TemplateContent>
<!-- add the following -->
<WizardExtension>
<Assembly>WarrenG.StartAction, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null</Assembly>
<FullClassName>WarrenG.StartAction.Wizard</FullClassName>
</WizardExtension>
<WizardData>
<WebApplication.DebugStartAction>1</WebApplication.DebugStartAction>
</WizardData>
</VSTemplate>
项目页面上的开始操作似乎是数字 0 到 4,按照它们的显示顺序。值 1 对应于特定页面。