Sdílet prostřednictvím


Nová generace projektů: Pod pokličkou, část první

Přemýšleli jste někdy o tom, jak vytvořit vlastní typ projektu? Zajímá vás, co se skutečně stane, když vytvoříte nový projekt? Pojďme se podívat pod kapuce a podívat se, co se opravdu děje.

Visual Studio za vás koordinuje několik úkolů:

  • Zobrazí strom všech dostupných typů projektů.

  • Zobrazí seznam šablon aplikací pro každý typ projektu a umožňuje vybrat jednu z nich.

  • Shromažďuje informace o projektu pro aplikaci, jako je název projektu a cesta.

  • Tyto informace předá projektové továrně.

  • Vygeneruje položky a složky projektu v aktuálním řešení.

Dialogové okno Nový projekt

Vše začíná, když vyberete typ projektu pro nový projekt. Začněme kliknutím na Nový projekt v nabídce Soubor . Zobrazí se dialogové okno Nový projekt , které vypadá nějak takto:

Screenshot of the New Project dialog box.

Podívejme se na ně podrobněji. Strom typy projektů obsahuje seznam různých typů projektů, které můžete vytvořit. Když vyberete typ projektu, jako je Visual C# Windows, zobrazí se seznam šablon aplikací, které vám pomůžou začít. Nainstalované šablony sady Visual Studio jsou nainstalovány sadou Visual Studio a jsou k dispozici pro libovolného uživatele počítače. Nové šablony, které vytvoříte nebo shromáždíte, se dají přidat do mých šablon a jsou dostupné jenom vám.

Když vyberete šablonu, jako je aplikace systému Windows, zobrazí se v dialogovém okně popis typu aplikace. V tomto případě se projekt pro vytvoření aplikace s uživatelským rozhraním systému Windows zobrazí.

V dolní části dialogového okna Nový projekt uvidíte několik ovládacích prvků, které shromažďují další informace. Ovládací prvky, které vidíte, závisí na typu projektu, ale obecně obsahují textové pole Název projektu, textové pole Umístění a související tlačítko Procházet a textové pole Název řešení a související pole Vytvořit adresář pro řešení.

Naplnění dialogového okna Nový projekt

Odkud získá dialogové okno Nový projekt informace? V práci existují dva mechanismy, jeden z nich je zastaralý. Dialogové okno Nový projekt kombinuje a zobrazuje informace získané z obou mechanismů.

Starší (zastaralá) metoda používá systémové položky registru a soubory .vsdir. Tento mechanismus se spustí při otevření sady Visual Studio. Novější metoda používá soubory .vstemplate. Tento mechanismus se spustí při inicializaci sady Visual Studio, například spuštěním

devenv /setup

nebo

devenv /installvstemplates

Typy projektů

Umístění a názvy kořenových uzlů typu Project , například Visual C# a Další jazyky, jsou určeny položkami systémového registru. Organizace podřízených uzlů, jako je databáze a inteligentní zařízení, zrcadlí hierarchii složek, které obsahují odpovídající soubory .vstemplate. Nejprve se podíváme na kořenové uzly.

Kořenové uzly typu projektu

Při inicializaci sady Visual Studio prochází podklíče klíče systémového registru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\NewProjectTemplates\TemplateDirs k sestavení a pojmenování kořenových uzlů stromu typů projektů. Tyto informace se ukládají do mezipaměti pro pozdější použití. Podívejte se na TemplateDirs\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\/1 klíč. Každá položka je identifikátor GUID balíčku VSPackage. Název podklíče (/1) se ignoruje, ale jeho přítomnost značí, že se jedná o kořenový uzel typu Project. Kořenový uzel může mít zase několik podklíčů, které řídí jeho vzhled ve stromu typů projektů. Podívejme se na některé z nich.

(Výchozí)

Toto je ID prostředku lokalizovaného řetězce, který označuje kořenový uzel. Prostředek řetězce se nachází ve satelitní knihovně DLL vybrané identifikátorem GUID balíčku VSPackage.

V tomto příkladu je identifikátor GUID balíčku VSPackage.

{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}

a ID prostředku (výchozí hodnota) kořenového uzlu (/1) je #2345.

Pokud vyhledáte identifikátor GUID v klíči blízkých balíčků a prozkoumáte podklíč SatelliteDll, můžete najít cestu sestavení, které obsahuje prostředek řetězce:

<Instalační cesta> sady Visual Studio\VC#\VCSPackages\1033\csprojui.dll

Chcete-li to ověřit, otevřete Průzkumník souborů a přetáhněte csprojui.dll do adresáře sady Visual Studio.. Tabulka řetězců ukazuje, že prostředek č. 2345 má popis Visual C#.

SortPriority

Určuje umístění kořenového uzlu ve stromu typů projektů.

REG_DWORD 0x00000014 SortPriority (20)

Čím nižší je počet priorit, tím vyšší je pozice ve stromu.

DeveloperActivity

Pokud je tento podklíč k dispozici, je pozice kořenového uzlu řízena dialogem Vývojář Nastavení. Příklad:

DeveloperActivity REG_SZ VC#

značí, že Visual C# bude kořenovým uzlem, pokud je sada Visual Studio nastavená pro vývoj v jazyce Visual C++. Jinak se bude jednat o podřízený uzel jiných jazyků.

Složka

Pokud je tento podklíč k dispozici, stane se kořenový uzel podřízeným uzlem zadané složky. Pod klíčem se zobrazí seznam možných složek.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\NewProjectTemplates\PseudoFolders

Položka Databázové projekty má například klíč složky, který odpovídá položce Jiné typy projektů v PseudoFolders. Ve stromu Typy projektů tedy budou databázové projekty podřízeným uzlem jiných typů projektů.

Podřízené uzly typu projektu a soubory .vstdir

Pozice podřízených uzlů ve stromu typů projektů se řídí hierarchií složek ve složkách ProjectTemplates. Pro šablony počítačů (nainstalované šablony sady Visual Studio) je typické umístění \Program Files\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\ a pro uživatelské šablony (Moje šablony), typické umístění je \My Documents\Visual Studio 14.0\Templates\ProjectTemplates\. Hierarchie složek z těchto dvou umístění se sloučí a vytvoří strom typů projektů.

V sadě Visual Studio s nastavením vývojáře v jazyce C# vypadá strom typů projektů přibližně takto:

Screenshot of the Project types folder tree in Visual Studio with C# developer settings.

Odpovídající složka ProjectTemplates vypadá takto:

Screenshot of the Project Templates folder tree in Visual Studio with C# developer settings.

Když se otevře dialogové okno Nový projekt, Visual Studio prochází složku ProjectTemplates a znovu vytvoří její strukturu ve stromu typů projektů s některými změnami:

  • Kořenový uzel ve stromu typů projektů je určen šablonou aplikace.

  • Název uzlu lze lokalizovat a může obsahovat speciální znaky.

  • Pořadí řazení lze změnit.

Vyhledání kořenového uzlu pro typ projektu

Když Visual Studio prochází složkami ProjectTemplates, otevře všechny soubory .zip a extrahuje všechny soubory .vstemplate. Soubor .vstemplate používá xml k popisu šablony aplikace. Další informace naleznete v tématu Nová generace projektu: Pod kapotou, část 2.

Značka <ProjectType> určuje typ projektu pro aplikaci. Například soubor \CSharp\SmartDevice\WindowsCE\1033\WindowsCE-EmptyProject.zip obsahuje soubor EmptyProject.vstemplate, který má tuto značku:

<ProjectType>CSharp</ProjectType>

Značka <ProjectType> , nikoli podsložka ve složce ProjectTemplates, určuje kořenový uzel aplikace ve stromu typů projektů. V tomto příkladu by se aplikace systém Windows CE zobrazovaly pod kořenovým uzlem Visual C# a i kdybyste přesunuli složku WindowsCE do složky VisualBasic, systém Windows CE aplikace by se stále zobrazovaly pod kořenovým uzlem Visual C#.

Lokalizace názvu uzlu

Když Visual Studio prochází složkami ProjectTemplates, prozkoumá všechny nalezené soubory .vstdir. Soubor .vstdir je soubor XML, který řídí vzhled typu projektu v dialogovém okně Nový projekt . V souboru .vstdir použijte <k pojmenování uzlu Typy projektů značku LocalizedName>.

Například soubor \CSharp\Database\TemplateIndex.vstdir obsahuje tuto značku:

<LocalizedName Package="{462b036f-7349-4835-9e21-bec60e989b9c}" ID="4598"/>

Určuje satelitní knihovnu DLL a ID prostředku lokalizovaného řetězce, který v tomto případě databázi pojmenuje kořenový uzel. Lokalizovaný název může obsahovat speciální znaky, které nejsou k dispozici pro názvy složek, například .NET.

Pokud není k dispozici žádná <značka LocalizedName>, typ projektu je pojmenován samotnou složkou Smart Telefon 2003.

Vyhledání pořadí řazení pro typ projektu

Chcete-li určit pořadí řazení typu projektu, soubory .vstdir používají <značku SortOrder> .

Například soubor \CSharp\Windows\Windows.vstdir obsahuje tuto značku:

<SortOrder>5</SortOrder>

Soubor \CSharp\Database\TemplateIndex.vstdir má značku s větší hodnotou:

<SortOrder>5000</SortOrder>

Čím nižší je číslo ve <značce SortOrder> , tím vyšší je pozice ve stromu, takže uzel Windows se zobrazí vyšší než uzel Databáze ve stromu typů projektů.

Pokud není pro typ projektu zadána žádná <značka SortOrder> , zobrazí se v abecedním pořadí za všemi typy projektů, které obsahují <specifikace SortOrder> .

Všimněte si, že ve složkách Dokumenty (Moje šablony) nejsou žádné soubory .vstdir. Názvy typů projektů uživatelských aplikací nejsou lokalizovány a zobrazují se v abecedním pořadí.

Rychlá revize

Pojďme upravit dialogové okno Nový projekt a vytvořit novou šablonu projektu uživatele.

  1. Přidejte podsložku MyProjectNode do složky \Program Files\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp.

  2. Vytvořte soubor MyProject.vstdir ve složce MyProjectNode pomocí libovolného textového editoru.

  3. Do souboru .vstdir přidejte tyto řádky:

    <TemplateDir Version="1.0.0">
        <SortOrder>6</SortOrder>
    </TemplateDir>
    
  4. Uložte a zavřete soubor .vstdir.

  5. Vytvořte soubor MyProject.vstemplate ve složce MyProjectNode pomocí libovolného textového editoru.

  6. Do souboru .vstemplate přidejte tyto řádky:

    <VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
        <TemplateData>
            <ProjectType>CSharp</ProjectType>
        </TemplateData>
    </VSTemplate>
    
  7. Uložte soubor .vstemplate a zavřete editor.

  8. Odešlete soubor .vstemplate do nové komprimované složky MyProjectNode\MyProject.zip.

  9. V příkazovém okně sady Visual Studio zadejte:

    devenv /installvstemplates
    

    Otevřete sadu Visual Studio.

  10. Otevřete dialogové okno Nový projekt a rozbalte uzel projektu Visual C#.

    Screenshot of the Project types folder tree in the New Project dialog box with MyProjectNode highlighted under the expanded Visual C# project node.

    Uzel MyProjectNode se zobrazí jako podřízený uzel jazyka Visual C# přímo pod uzlem Windows.