Použití průvodců se šablonami projektů

Visual Studio poskytuje IWizard rozhraní, které při implementaci umožňuje spouštět vlastní kód, když uživatel vytvoří projekt ze šablony.

Přizpůsobení šablony projektu se dá použít k zobrazení vlastního uživatelského rozhraní, které shromažďuje uživatelský vstup pro přizpůsobení šablony, přidání dalších souborů do šablony nebo jakoukoli jinou akci povolenou 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í je pojmenována k popisu bodu, ve kterém je volána. Například Visual Studio volá RunStarted okamžitě, když začne vytvářet projekt, což z něj dělá dobré místo pro psaní 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 pomocí projektu š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.

  1. Vytvořte projekt šablony projektu jazyka C# (v sadě Visual Studio vyberte Soubor>nový>projekt a vyhledejte "šablona projektu"). Pojmenujte ho MyProjectTemplate.

    Poznámka:

    Může se zobrazit výzva k instalaci sady Visual Studio SDK. Další informace naleznete v tématu Instalace sady Visual Studio SDK.

  2. Přidejte nový projekt VSIX do stejného řešení jako projekt šablony projektu (v Průzkumník řešení vyberte uzel řešení, klikněte pravým tlačítkem a vyberte Přidat>nový projekt a vyhledejte "vsix"). Pojmenujte ho MyProjectWizard.

  3. Nastavte projekt VSIX jako spouštěný projekt. V Průzkumník řešení vyberte uzel projektu VSIX, klikněte pravým tlačítkem myši a vyberte Nastavit jako spouštěný projekt.

  4. Přidejte projekt šablony jako prostředek projektu VSIX. V Průzkumník řešení najděte v uzlu projektu VSIX soubor source.extension.vsixmanifest. Poklikáním ho otevřete v editoru manifestu.

  5. V editoru manifestu vyberte kartu Prostředky na levé straně okna.

  6. 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.

  7. Sestavte řešení a spusťte ladění. Zobrazí se druhá instance sady Visual Studio. (Může to trvat několik minut.)

  8. 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. Právě jste vytvořili vlastní šablonu projektu! Zastavte ladění.

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.

  1. Nastavte projekt VSIX tak, aby umožňoval vytvoření sestavení.

  2. V Průzkumník řešení vyberte uzel projektu VSIX. Pod Průzkumník řešení by se mělo zobrazit okno Vlastnosti. Pokud ne, vyberte okno Zobrazit>vlastnosti nebo stiskněte klávesu F4. V okně Vlastnosti vyberte následující pole true:

    • Zahrnutí sestavení do kontejneru VSIX

    • Zahrnutí symbolů ladění do místního nasazení VSIX

    • Zahrnutí symbolů ladění do kontejneru VSIX

  3. 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 v projectu vyberte MyProjectWizard.

  4. Do projektu VSIX přidejte následující odkazy. (V Průzkumník řešení v uzlu projektu VSIX vyberte Odkazy, klikněte pravým tlačítkem a vyberte Přidat odkaz.) V dialogovém okně Přidat odkaz na kartě Framework vyhledejte sestavení System.model 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.

  5. Přidejte třídu pro implementaci průvodce do projektu VSIX. (V Průzkumník řešení, klikněte pravým tlačítkem myši na uzel projektu VSIX a vyberte Přidat, pak Nová položka a pak Třída.) Pojmenujte třídu WizardImplementation.

  6. 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;
            }
        }
    }
    

    Vlastnost UserInputForm odkazovaná v tomto kódu bude implementována později.

    Třída WizardImplementation obsahuje implementace metody pro každého člena IWizard. V tomto příkladu RunStarted provádí úlohu pouze metoda. Všechny ostatní metody buď nedělají nic nebo vrací true.

    Metoda RunStarted přijímá čtyři parametry:

    • Parametr Object , který lze přetypovat na kořenový _DTE objekt, který vám umožní přizpůsobit projekt.

    • Parametr Dictionary<TKey,TValue> , který obsahuje kolekci všech předdefinovaný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 , které obsahuje sadu parametrů předaných průvodci sadou Visual Studio.

      Tento příklad přidá do parametru hodnotu parametru ze vstupního Dictionary<TKey,TValue> formuláře uživatele. Každá instance parametru $custommessage$ v projektu bude nahrazena textem zadaným uživatelem.

  7. Teď vytvořte UserInputForm. Do souboru WizardImplementation.cs přidejte následující kód za konec WizardImplementation tří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 textBox1 a tlačítko s názvem button1. Po kliknutí na tlačítko se text z textového pole uloží do parametru customMessage .

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ěkteré řádky, abyste věděli, kde najít implementaci průvodce při vytvoření nového projektu.

  1. Podepište sestavení. V Průzkumník řešení vyberte projekt VSIX, klikněte pravým tlačítkem myši a vyberte Vlastnosti projektu.

  2. V okně Vlastnosti projektu vyberte kartu Podepisování. Na kartě Podepisování zaškrtněte políčko Podepsat sestavení. V poli Zvolit soubor silného názvu vyberte <Nový>. V okně Vytvořit klíč silného názvu do pole Název souboru klíče zadejte key.snk. Zrušte zaškrtnutí políčka Zamknout soubor klíče pomocí pole heslo.

  3. V Průzkumník řešení vyberte projekt VSIX a najděte okno Vlastnosti.

  4. Nastavte výstup sestavení na pole Výstupní adresář na hodnotu true. To umožňuje, aby se sestavení při vytvoření řešení zkopírovalo do výstupního adresáře. Soubor je stále obsažen v .vsix souboru. Abyste zjistili jeho podpisový klíč, musíte vidět sestavení.

  5. Znovu sestavte řešení.

  6. Soubor key.snk teď najdete v adresáři projektu MyProjectWizard (<umístění> vašeho disku\MyProjectTemplate\MyProjectWizard\key.snk). Zkopírujte soubor key.snk.

  7. 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.)

  8. Otevřete příkazové okno a přejděte do adresáře, ve kterém bylo sestavení vytvořeno.

  9. Vyhledejte podpisový nástroj 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 příkaz /R . sn.exe v příkazovém okně. Poznamenejte si cestu.

  10. Extrahujte veřejný klíč ze souboru key.snk . V příkazovém okně zadejte

    <umístění sn.exe>\sn.exe -p key.snk outfile.key.

    Nezapomeňte cestu sn.exe ohraničí uvozovkami, pokud jsou v názvech adresářů mezery!

  11. Získání tokenu 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.

  12. Přidejte odkaz na vlastního průvodce do souboru .vstemplate šablony projektu. V Průzkumník řešení vyhledejte soubor s názvem 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.

  13. 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.

  1. V Průzkumník řešení přejděte do projektu MyProjectTemplate a otevřete Class1.cs.

  2. Main Do metody aplikace přidejte následující řádek kódu.

    Console.WriteLine("$custommessage$");
    

    $custommessage$ Parametr 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.

  1. Znovu sestavte řešení a spusťte ladění. Měla by se zobrazit druhá instance sady Visual Studio.

  2. Vytvořte nový projekt MyProjectTemplate. (Soubor>nový>projekt).

  3. V dialogovém okně Nový projekt vyhledejte šablonu "myproject", zadejte název a klikněte na OK.

    Otevře se formulář pro zadání uživatele průvodce.

  4. 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.

  5. V Průzkumník řešení klikněte pravým tlačítkem myši na soubor zdrojového kódu a klikněte na Zobrazit kód.

    Všimněte si, že $custommessage$ byl nahrazen textem zadaným v uživatelském vstupním formuláři průvodce.