Sdílet prostřednictvím


Návrh podtypů projektů

Podtypy projektů umožňují rozšíření projektů VSPackage na základě modulu Microsoft Build Engine (MSBuild). Použití agregace umožňuje opakovaně používat většinu základního spravovaného projektového systému implementovaného v sadě Visual Studio, ale přesto přizpůsobit chování pro konkrétní scénář.

Následující témata popisují základní návrh a implementaci podtypů projektu:

  • Návrh podtypu projektu

  • Agregace na více úrovních

  • Podpůrná rozhraní.

Návrh podtypu projektu

Inicializace podtypu projektu se dosahuje agregací hlavních IVsHierarchy objektů a IVsProject objektů. Tato agregace umožňuje podtyp projektu přepsat nebo vylepšit většinu funkcí základního projektu. Podtypy projektu získají první šanci na zpracování vlastností pomocí IVsHierarchypříkazů pomocí IOleCommandTarget a IVsUIHierarchysprávy položek projektu pomocí IVsProject3. Podtypy projektu můžou také rozšířit:

  • Objekty konfigurace projektu

  • Objekty závislé na konfiguraci

  • Objekty procházení nezávislé na konfiguraci

  • Objekty automatizace projektů

  • Kolekce vlastností automatizace projektů

Další informace o rozšiřitelnosti podle podtypů projektu naleznete v tématu Vlastnosti a metody rozšířené podle podtypů projektu.

Soubory zásad

Prostředí sady Visual Studio poskytuje příklad rozšíření základního systému projektu podtypem projektu v jeho implementaci souborů zásad. Soubor zásad umožňuje tvarování prostředí sady Visual Studio tím, že spravuje funkce, které zahrnují Průzkumník řešení, dialogové okno Přidat projekt, dialogové okno Přidat novou položku a dialogové okno Vlastnosti. Podtyp zásady přepisuje a vylepšuje tyto funkce prostřednictvím IVsFilterAddProjectItemDlgIOleCommandTarget a IVsUIHierarchy implementací.

Mechanismus agregace

Mechanismus agregace podtypu projektu prostředí podporuje více úrovní agregace, což umožňuje implementaci pokročilého podtypu pomocí dalšího ochucení projektu. Podpůrné objekty podtypu projektu, například IVsProjectFlavorCfg, jsou také navrženy tak, aby umožňovaly více úrovní vrstvení. V souladu s omezeními pravidel agregace modelu COM a MODELU COM je třeba naprogramovat podtypy projektů a základní projekty společně, aby se vnitřní podtyp nebo základní projekt mohly řádně účastnit volání metod delegování a řízení počtu odkazů. To znamená, že projekt, který se má agregovat, musí být naprogramován tak, aby podporoval agregaci.

Následující obrázek znázorňuje schéma agregace podtypu projektu s více úrovněmi.

Visual Studio multilevel projectflavor graphic

Agregace podtypu projektu s více úrovněmi se skládá ze tří úrovní, základního projektu agregovaného podtypem projektu a následnou agregací pokročilým podtypem projektu. Obrázek se zaměřuje na některá z podpůrných rozhraní, která jsou poskytována jako součást architektury podtypu projektu sady Visual Studio.

Mechanismy nasazení

Mezi mnoho základních funkcí systému projektů vylepšených podtypem projektu patří mechanismy nasazení. Podtyp projektu ovlivňuje mechanismy nasazení implementací konfiguračních rozhraní (například IVsDeployableProjectCfg a IVsBuildableProjectCfg), které jsou načteny voláním QueryInterface on IVsProjectCfgProvider. Ve scénáři, kdy podtyp projektu i pokročilý podtyp projektu přidávají různé implementace konfigurace, základní projekt volá QueryInterface pokročilé podtypy IUnknownprojektu . Pokud podtyp vnitřního projektu obsahuje implementaci konfigurace, kterou základní projekt požaduje, pokročilý podtyp projektu deleguje na implementaci poskytovanou podtypem vnitřního projektu. Jako mechanismus pro zachování stavu z jedné úrovně agregace na jinou se implementují všechny úrovně podtypů projektu, které zachovají IPersistXMLFragment nesouvisená data XML do souborů projektu. Další informace naleznete v tématu Zachování dat v souboru projektu MSBuild. IInternalExtenderProvider je implementovaný jako mechanismus pro načtení rozšiřujících procesů automatizace z podtypů projektu.

Následující obrázek se zaměřuje na implementaci extenderu automatizace, konkrétně objekt procházení konfigurace projektu používaný podtypy projektu k rozšíření základního systému projektu.

VS Project Flavor Auto Extender graphic

Podtypy projektu mohou dále rozšířit základní systém projektu rozšířením modelu objektů automatizace. Tyto objekty jsou definovány jako součást objektu automatizace DTE a slouží k rozšíření objektu Projektu, objektu ProjectItem a objektu Configuration . Další informace naleznete v tématu Rozšíření objektového modelu základního projektu.

Víceúrovňová agregace

Implementace podtypu projektu, která zabalí podtyp projektu nižší úrovně, musí být naprogramována spolu s cílem umožnit správné fungování vnitřního podtypu projektu. Seznam odpovědností za programování zahrnuje:

  • Implementace IPersistXMLFragment podtypu projektu, který obtéká vnitřní podtyp, musí delegovat na IPersistXMLFragment implementaci podtypu vnitřního projektu pro obě Load metody Save .

  • Implementace IInternalExtenderProvider podtypu projektu obálky musí na tento vnitřní podtyp projektu delegovat. Konkrétně musí implementace GetExtenderNames získat řetězec názvů z vnitřního podtypu projektu a pak zřetězení řetězců, které chce přidat jako extendery.

  • Implementace IVsProjectCfgProvider podtypu projektu obálky musí vytvořit instanci IVsProjectFlavorCfg objektu jeho vnitřního podtypu projektu a uchovávat ho jako soukromý delegát, protože pouze objekt konfigurace projektu základního projektu přímo ví, že objekt konfigurace dílčího typu projektu obálky existuje. Podtyp vnějšího projektu může zpočátku zvolit konfigurační rozhraní, která chce zpracovat přímo, a potom delegovat zbytek na implementaci vnitřního podtypu get_CfgTypeprojektu .

Podpůrná rozhraní

Základní projekt deleguje volání na podpůrná rozhraní přidaná podtypem projektu za účelem rozšíření různých aspektů jeho implementace. To zahrnuje rozšíření objektů konfigurace projektu a různých objektů prohlížeče vlastností. Tato rozhraní se načítají voláním QueryInterfacepunkOuter (ukazatele na IUnknown) agregátoru vnějšího podtypu projektu.

Rozhraní Podtyp projektu
IVsProjectFlavorCfg Umožňuje podtypu projektu:

- Poskytnout provádění IVsDeployableProjectCfg.
- Řízení spuštění ladicího programu povolením podtypu projektu poskytnout vlastní implementaci IVsDebuggableProjectCfg.
- Zakažte vyhodnocení výrazu v době návrhu DBGLAUNCH_DesignTimeExprEval vhodným zpracováním případu při jeho provádění QueryDebugLaunch.
IInternalExtenderProvider Umožňuje podtypu projektu:

- Rozšiřte VSHPROPID_BrowseObject projekt tak, aby se přidaly nebo odebraly vlastnosti nezávislé na konfiguraci projektu.
- Rozšíření objektu automatizace projektu (VSHPROPID_ExtObject) projektu.

Výše uvedené hodnoty vlastností jsou převzaty z __VSHPROPID2 výčtu.
IVsCfgBrowseObject Umožňuje podtyp projektu namapovat zpět na IVsCfg objekt vzhledem k objektu konfigurace projektu procházet objekt.
IVsBrowseObject Umožňuje podtyp projektu namapovat zpět na IVsHierarchy objekt nebo objekt VSITEMID vzhledem k objektu procházení konfigurace projektu.
IPersistXMLFragment Umožňuje podtypu projektu zachovat libovolná strukturovaná data XML do souboru projektu (.vbproj nebo .csproj). Tato data nejsou viditelná pro nástroj MSBuild.
IVsBuildPropertyStorage Umožňuje podtypu projektu:

– Přidejte nové vlastnosti NÁSTROJE MSBuild, které se mají zachovat.
– Odeberte nepotřebné vlastnosti z nástroje MSBuild.
– Dotaz na aktuální hodnotu vlastnosti MSBuild.
- Změňte aktuální hodnotu vlastnosti MSBuild.

Viz také