使用專案範本建立屬於自己的入門套件(下) 文/沈炳宏 ==========程式========= 程式1 包含多專案的範本 包含多專案的範本 Icon.ico VisualBasic ClassLibrary1\MyTemplate.vstemplate ClassLibrary2\MyTemplate.vstemplate ==========程式========= ==========程式========= 程式2 包含多項目的範本 Icon.ico 包含多項目的範本 VisualBasic Form1.vb Form1.Designer.vb Resource.resx ==========程式========= ==========程式========= 程式3 using Microsoft.VisualStudio.TemplateWizard; using VSLangProj; using EnvDTE; using EnvDTE80; using System.Windows.Forms; internal class WizardImplementation : IWizard { private EnvDTE._DTE dte; private UserInputForm inputForm; private bool shouldAddClassItem; private string exeName; private string consoleMessage; EnvDTE._DTE DTE { get { return dte; } } void IWizard.RunStarted(object application, Dictionary replacementsDictionary, WizardRunKind runKind, object[] customParams) { dte = (EnvDTE._DTE)(application); inputForm = new UserInputForm(); inputForm.ShowDialog(); if ((inputForm.get_ExeName() == null) | (inputForm.get_ConsoleMessage() == null)) { throw new WizardCancelledException(); } shouldAddClassItem = inputForm. get_ShouldAddClassItem(); exeName = inputForm.get_ExeName(); consoleMessage = inputForm.get_ConsoleMessage(); replacementsDictionary.Add("$consolemessage$", consoleMessage); } void IWizard.ProjectFinishedGenerating( EnvDTE.Project project) { if (shouldAddClassItem) { Solution2 soln2 = (Solution2)DTE.Solution; string classTemplate = soln2. GetProjectItemTemplate("Class", "csproj"); project.ProjectItems. AddFromTemplate(classTemplate, "Class.cs"); } EnvDTE.Property p = project.Properties.Item ("AssemblyName"); p.Value = exeName; } } ==========程式========= ==========程式========= 程式4 IWizardSample, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=0fee70639e08613f WizardImplementation ==========程式========= ==========程式========= 程式5 StarterKitSample.zip 入門套件範例 入門套件範例 VSTemplate 1.0 ==========程式=========