編集:元のリクエストと以前に提案されたソリューションの動作の両方の誤解により、回答が改訂されました。
カスタム MVC プロジェクト テンプレートの開始アクションを設定するには、インターフェイスを実装するクラスを含む dll を作成する必要がありMicrosoft.VisualStudio.TemplateWizard.IWizard
ます。ウィザード dll を使用するには、Visual Studio のプローブ パス ((VS2010 インストール ディレクトリ)\Common7\IDE、(VS2010 インストール ディレクトリ)\Common7\IDE\PrivateAssemblies、または (VS2010 インストール ディレクトリ) にコピーする必要があります)。 \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 は特定のページに対応します。