Postupy: Použití průvodců se šablonami projektů
Platí pro:
Visual Studio Visual Studio pro Mac
Visual Studio
Code
Visual Studio poskytuje IWizard rozhraní, které při implementaci umožňuje spustit vlastní kód, když uživatel vytvoří projekt ze šablony.
Přizpůsobení šablony projektu lze použít k zobrazení vlastního uživatelského rozhraní, které shromažďuje uživatelský vstup k přizpůsobení šablony, přidání dalších souborů do šablony nebo jakékoli jiné akce povolené v projektu.
Metody IWizard rozhraní jsou volány v různých časech při vytváření projektu, počínaje, jakmile uživatel klikne na OK v dialogovém okně Nový projekt . Každá metoda rozhraní má název popis bodu, ve kterém je volána. Visual Studio například volá RunStarted okamžitě, když začne vytvářet projekt, takže je vhodné místo pro zápis vlastního kódu pro shromažďování uživatelských vstupů.
Vytvoření projektu šablony projektu pomocí projektu VSIX
Začnete vytvářet vlastní šablonu s projektem šablony projektu, která je součástí sady Visual Studio SDK. V tomto postupu použijeme projekt šablony projektu jazyka C#, ale existuje také projekt šablony projektu jazyka Visual Basic. Pak do řešení, které obsahuje projekt šablony projektu, přidáte projekt VSIX.
Vytvořte projekt šablony projektu V# (v sadě Visual Studio vyberte Soubor>nový>projekt a vyhledejte "šablona projektu"). Pojmenujte jej MyProjectTemplate.
Poznámka
Můžete být požádáni o instalaci sady Visual Studio SDK. Další informace naleznete v tématu Instalace sady Visual Studio SDK.
Přidejte nový projekt VSIX do stejného řešení jako projekt šablony projektu (v Průzkumníku řešení vyberte uzel řešení, klikněte pravým tlačítkem a vyberte Přidatnový projekt a vyhledejte> "vsix"). Pojmenujte jej MyProjectWizard.
Nastavte projekt VSIX jako spouštěný projekt. V Průzkumníku řešení vyberte uzel projektu VSIX, klikněte pravým tlačítkem myši a vyberte Nastavit jako spouštěný projekt.
Přidejte projekt šablony jako prostředek projektu VSIX. V Průzkumníku řešení v uzlu projektu VSIX vyhledejte soubor source.extension.vsixmanifest . Poklikáním ho otevřete v editoru manifestu.
V editoru manifestu vyberte kartu Prostředky na levé straně okna.
Na kartě Prostředky vyberte Nový. V okně Přidat nový prostředek v poli Typ vyberte Microsoft.VisualStudio.ProjectTemplate. V poli Zdroj vyberte projekt v aktuálním řešení. V poli Projekt vyberte MyProjectTemplate. Pak klikněte na OK.
Sestavte řešení a spusťte ladění. Zobrazí se druhá instance sady Visual Studio. (Může to trvat několik minut.)
Ve druhé instanci sady Visual Studio zkuste vytvořit nový projekt s novou šablonou (Soubor>nový>projekt, vyhledejte "myproject"). Nový projekt by se měl zobrazit s třídou s názvem Class1. Teď jste vytvořili vlastní šablonu projektu. Zastavte ladění nyní.
Průvodce vytvořením vlastní šablony
Tento postup ukazuje, jak vytvořit vlastního průvodce, který před vytvořením projektu otevře formulář Windows Form. Formulář umožňuje uživatelům přidat vlastní hodnotu parametru přidanou do zdrojového kódu během vytváření projektu.
Nastavte projekt VSIX tak, aby umožňoval vytvoření sestavení.
V Průzkumníku řešení vyberte uzel projektu VSIX. Pod Průzkumníkem řešení byste měli vidět okno Vlastnosti . Pokud ne, vyberteoknoZobrazit> vlastnosti nebo stiskněte klávesu F4. V okně Vlastnosti vyberte následující pole:
trueZahrnutí sestavení do kontejneru VSIX
Zahrnutí symbolů ladění do místního nasazení VSIX
Zahrnutí symbolů ladění do kontejneru VSIX
Přidejte sestavení jako prostředek do projektu VSIX. Otevřete soubor source.extension.vsixmanifest a vyberte kartu Prostředky . V okně Přidat nový prostředek v části Typ vyberte Microsoft.VisualStudio.Assembly, pro Zdroj vyberte projekt v aktuálním řešení a pro Project vyberte MyProjectWizard.
Do projektu VSIX přidejte následující odkazy. (V Průzkumníku řešení vyberte v uzlu projektu VSIX odkazy, klikněte pravým tlačítkem myši a vyberte Přidat odkaz.) V dialogovém okně Přidat odkaz na kartě Framework vyhledejte sestavení System.Windows Forms a vyberte ho. Vyhledejte a vyberte také sestavení System a System.Drawing . Teď vyberte kartu Rozšíření . Vyhledejte sestavení EnvDTE a vyberte ho. Vyhledejte také sestavení Microsoft.VisualStudio.TemplateWizardInterface a vyberte ho. Klikněte na OK.
Přidejte třídu pro implementaci průvodce do projektu VSIX. (V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel projektu VSIX a vyberte Přidat, pak Nová položka a potom Třída.) Pojmenujte třídu WizardImplementation.
Nahraďte kód v souboru WizardImplementationClass.cs následujícím kódem:
using System; using System.Collections.Generic; using Microsoft.VisualStudio.TemplateWizard; using System.Windows.Forms; using EnvDTE; namespace MyProjectWizard { public class WizardImplementation:IWizard { private UserInputForm inputForm; private string customMessage; // This method is called before opening any item that // has the OpenInEditor attribute. public void BeforeOpeningFile(ProjectItem projectItem) { } public void ProjectFinishedGenerating(Project project) { } // This method is only called for item templates, // not for project templates. public void ProjectItemFinishedGenerating(ProjectItem projectItem) { } // This method is called after the project is created. public void RunFinished() { } public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) { try { // Display a form to the user. The form collects // input for the custom message. inputForm = new UserInputForm(); inputForm.ShowDialog(); customMessage = UserInputForm.CustomMessage; // Add custom parameters. replacementsDictionary.Add("$custommessage$", customMessage); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } // This method is only called for item templates, // not for project templates. public bool ShouldAddProjectItem(string filePath) { return true; } } }UserInputForm odkazovaný v tomto kódu bude implementován později.
Třída
WizardImplementationobsahuje implementace metody pro každého člena IWizard. V tomto příkladu RunStarted provádí úlohu pouze metoda. Všechny ostatní metody buď nic nebo vrátittrue.Metoda RunStarted přijímá čtyři parametry:
Parametr Object , který lze přetypovat do kořenového _DTE objektu, umožňuje přizpůsobit projekt.
Parametr Dictionary<TKey,TValue> , který obsahuje kolekci všech předem definovaných parametrů v šabloně. Další informace o parametrech šablony najdete v tématu Parametry šablony.
Parametr WizardRunKind , který obsahuje informace o tom, jaký druh šablony se používá.
Pole Object obsahující sadu parametrů předaných průvodci sadou Visual Studio.
Tento příklad přidá do parametru hodnotu parametru Dictionary<TKey,TValue> ze vstupního formuláře uživatele. Každá instance parametru
$custommessage$v projektu bude nahrazena textem zadaným uživatelem.
Teď vytvořte UserInputForm. Do souboru WizardImplementation.cs přidejte následující kód za konec
WizardImplementationtřídy.public partial class UserInputForm : Form { private static string customMessage; private TextBox textBox1; private Button button1; public UserInputForm() { this.Size = new System.Drawing.Size(155, 265); button1 = new Button(); button1.Location = new System.Drawing.Point(90, 25); button1.Size = new System.Drawing.Size(50, 25); button1.Click += button1_Click; this.Controls.Add(button1); textBox1 = new TextBox(); textBox1.Location = new System.Drawing.Point(10, 25); textBox1.Size = new System.Drawing.Size(70, 20); this.Controls.Add(textBox1); } public static string CustomMessage { get { return customMessage; } set { customMessage = value; } } private void button1_Click(object sender, EventArgs e) { customMessage = textBox1.Text; this.Close(); } }Vstupní formulář uživatele poskytuje jednoduchý formulář pro zadání vlastního parametru. Formulář obsahuje textové pole s názvem
textBox1a tlačítko s názvembutton1. Po kliknutí na tlačítko se text z textového pole uloží do parametrucustomMessage.
Připojení průvodce k vlastní šabloně
Pokud chcete, aby vaše vlastní šablona projektu používala vlastního průvodce, musíte podepsat sestavení průvodce a přidat do vlastní šablony projektu nějaké řádky, aby věděla, kde najít implementaci průvodce při vytvoření nového projektu.
Podepište sestavení. V Průzkumníku řešení vyberte projekt VSIX, klikněte pravým tlačítkem myši a vyberte Vlastnosti projektu.
V okně Vlastnosti projektu vyberte kartu Podepisování . Na kartě Podepisování zaškrtněte políčko Podepsat sestavení. V poli Zvolit soubor se silným názvem vyberte <Nový>. V okně Vytvořit klíč silného názvu zadejte do pole Název souboru klíčeklíč.snk. Zrušte zaškrtnutí políčka Zamknout soubor klíče s polem pro heslo .
V Průzkumníku řešení vyberte projekt VSIX a vyhledejte okno Vlastnosti .
Nastavte pole Kopírovat výstup sestavení do pole Výstupní adresář na hodnotu true. To umožňuje zkopírování sestavení do výstupního adresáře při vytvoření řešení. Soubor je stále obsažen
.vsix. Abyste zjistili podpisový klíč, musíte vidět sestavení.Znovu sestavte řešení.
Soubor key.snk teď najdete v adresáři projektu MyProjectWizard (<umístění> disku\MyProjectTemplate\MyProjectWizard\key.snk). Zkopírujte soubor key.snk .
Přejděte do výstupního adresáře a vyhledejte sestavení (<umístění> disku\MyProjectTemplate/MyProjectWizard\bin\Debug\MyProjectWizard.dll). Sem vložte soubor key.snk . (To není nezbytně nutné, ale usnadní se následující kroky.)
Otevřete příkazové okno a přejděte do adresáře, ve kterém bylo sestavení vytvořeno.
Najděte nástroj pro podepisovánísn.exe . Například v 64bitovém operačním systému Windows 10 by typická cesta byla následující:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Pokud nástroj nemůžete najít, zkuste spustit umístění /R . sn.exe v příkazovém okně. Poznamenejte si cestu.
Extrahujte veřejný klíč ze souboru key.snk . Do příkazového okna zadejte
<umístění sn.exe\sn.exe > -p key.snk outfile.key.
Nezapomeňte ohraničí cestu sn.exe uvozovkami, pokud jsou v názvech adresářů mezery!
Získejte token veřejného klíče ze souboru outfile:
<umístění sn.exe\sn.exe > -t outfile.key.
Znovu nezapomeňte na uvozovky. Ve výstupu by se měl zobrazit řádek podobný tomuto
Token veřejného klíče je <token>
Poznamenejte si tuto hodnotu.
Přidejte odkaz na vlastního průvodce do souboru .vstemplate šablony projektu. V Průzkumníku řešení vyhledejte soubor MyProjectTemplate.vstemplate a otevřete ho. Za konec oddílu <TemplateContent> přidejte následující oddíl:
<WizardExtension> <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=token</Assembly> <FullClassName>MyProjectWizard.WizardImplementation</FullClassName> </WizardExtension>Kde MyProjectWizard je název sestavení a token je token , který jste zkopírovali v předchozím kroku.
Uložte všechny soubory v projektu a znovu sestavte.
Přidání vlastního parametru do šablony
V tomto příkladu projekt použitý jako šablona zobrazí zprávu zadanou ve vstupní podobě uživatele vlastního průvodce.
V Průzkumníku řešení přejděte do projektu MyProjectTemplate a otevřete Class1.cs.
MainDo metody aplikace přidejte následující řádek kódu.Console.WriteLine("$custommessage$");Parametr
$custommessage$se nahradí textem zadaným ve vstupním formuláři uživatele při vytvoření projektu ze šablony.
Tady je úplný soubor kódu před exportem do šablony.
using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
namespace $safeprojectname$
{
public class Class1
{
static void Main(string[] args)
{
Console.WriteLine("$custommessage$");
}
}
}
Použití vlastního průvodce
Teď můžete vytvořit projekt ze šablony a použít vlastního průvodce.
Znovu sestavte řešení a spusťte ladění. Měla by se zobrazit druhá instance sady Visual Studio.
Vytvořte nový projekt MyProjectTemplate. (Soubor>Nwe>Projekt).
V dialogovém okně Nový projekt vyhledejte šablonu , zadejte název a klikněte na TLAČÍTKO OK.
Otevře se formulář pro zadání uživatele průvodce.
Zadejte hodnotu vlastního parametru a klikněte na tlačítko.
Formulář pro zadání uživatele průvodce se zavře a projekt se vytvoří ze šablony.
V Průzkumníku řešení klikněte pravým tlačítkem na soubor zdrojového kódu a klikněte na Zobrazit kód.
Všimněte si, že
$custommessage$byl nahrazen textem zadaným ve formuláři pro zadávání uživatele průvodce.