Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podtypy projektu umożliwiają pakietom VSPackage rozszerzanie projektów na podstawie aparatu Microsoft Build Engine (MSBuild). Użycie agregacji umożliwia ponowne użycie większości podstawowego zarządzanego systemu projektu zaimplementowanego w programie Visual Studio, ale nadal dostosowuje zachowanie dla określonego scenariusza.
W poniższych tematach szczegółowo opisano podstawowy projekt i implementację podtypów projektu:
Projekt podtypu.
Agregacja wieloeziomowa.
Interfejsy pomocnicze.
Projekt podtypu projektu
Inicjowanie podtypu projektu jest osiągane przez agregowanie obiektów głównych IVsHierarchy i IVsProject . Ta agregacja umożliwia podtypowi projektu zastąpienie lub zwiększenie większości możliwości projektu podstawowego. Podtypy projektu mają pierwszą szansę obsługi właściwości przy użyciu IVsHierarchypoleceń , poleceń i IVsUIHierarchyIOleCommandTarget i zarządzania elementami projektu przy użyciu polecenia IVsProject3. Podtypy projektu mogą również rozszerzać:
Obiekty konfiguracji projektu.
Obiekty zależne od konfiguracji.
Obiekty przeglądania niezależne od konfiguracji.
Obiekty automatyzacji projektu.
Kolekcje właściwości automatyzacji projektu.
Aby uzyskać więcej informacji na temat rozszerzalności według podtypów projektu, zobacz Właściwości i metody rozszerzone według podtypów projektu.
Pliki zasad
Środowisko programu Visual Studio udostępnia przykład rozszerzenia podstawowego systemu projektu przy użyciu podtypu projektu w implementacji plików zasad. Plik zasad umożliwia kształtowanie środowiska programu Visual Studio przez zarządzanie funkcjami, które obejmują Eksplorator rozwiązań, okno dialogowe Dodawanie projektu, okno dialogowe Dodawanie nowego elementu i okno dialogowe Właściwości. Podtyp zasad zastępuje i rozszerza te funkcje za pomocą IVsFilterAddProjectItemDlgmetod i IOleCommandTarget IVsUIHierarchy implementacji.
Mechanizm agregacji
Mechanizm agregacji podtypu projektu środowiska obsługuje wiele poziomów agregacji, co pozwala na zaimplementowanie zaawansowanego podtypu przez dalsze smakowanie projektu o smaku. Ponadto obiekty pomocnicze podtypu projektu, takie jak IVsProjectFlavorCfg, zostały zaprojektowane w celu umożliwienia obsługi wielu poziomów warstw. Zgodnie z ograniczeniami reguł agregacji COM i COM, podtypy projektu i projekty podstawowe muszą być zaprogramowane wspólnie, aby umożliwić wewnętrzny podtyp lub projekt podstawowy, aby prawidłowo uczestniczyć w delegowaniu wywołań metod i zarządzaniu liczbami odwołań. Oznacza to, że projekt, który ma zostać zagregowany, musi być zaprogramowany w celu wspierania agregacji.
Na poniższej ilustracji przedstawiono schematową reprezentację agregacji podtypu projektu wielowymiarowego.

Agregacja podtypu projektu wieloetapowego składa się z trzech poziomów, projektu podstawowego, który jest agregowany przez podtyp projektu, a następnie dodatkowo agregowany przez zaawansowany podtyp projektu. Rysunek koncentruje się na niektórych interfejsach pomocniczych, które są udostępniane w ramach architektury podtypu projektu Visual Studio.
Mechanizmy wdrażania
Wśród wielu podstawowych funkcji systemu projektu rozszerzonych przez podtyp projektu są mechanizmy wdrażania. Podtyp projektu wpływa na mechanizmy wdrażania przez zaimplementowanie interfejsów konfiguracji (takich jak IVsDeployableProjectCfg i IVsBuildableProjectCfg), które są pobierane przez wywołanie metody QueryInterface w witrynie IVsProjectCfgProvider. W scenariuszu, w którym zarówno podtyp projektu, jak i zaawansowany podtyp projektu dodają różne implementacje konfiguracji, podstawowy projekt wywołuje podtyp QueryInterface projektu zaawansowanego IUnknown. Jeśli podtyp projektu wewnętrznego zawiera implementację konfiguracji, o którą prosi projekt podstawowy, zaawansowane podtyp projektu deleguje do implementacji dostarczonej przez podtyp projektu wewnętrznego. Jako mechanizm utrwalania stanu z jednego poziomu agregacji do drugiego, wszystkie poziomy podtypów projektu implementują IPersistXMLFragment utrwalanie danych XML niezwiązanych z kompilacją w plikach projektu. Aby uzyskać więcej informacji, zobacz Utrwalanie danych w pliku projektu MSBuild. IInternalExtenderProvider jest implementowany jako mechanizm pobierania rozszerzeń automatyzacji z podtypów projektu.
Poniższa ilustracja koncentruje się na implementacji rozszerzenia automatyzacji, w szczególności obiektu przeglądania konfiguracji projektu używanego przez podtypy projektu w celu rozszerzenia podstawowego systemu projektu.

Podtypy projektu mogą dodatkowo rozszerzyć podstawowy system projektu przez rozszerzenie modelu obiektów automatyzacji. Są one definiowane jako część obiektu automatyzacji DTE i są używane do rozszerzania obiektu Project, ProjectItem obiektu i Configuration obiektu. Aby uzyskać więcej informacji, zobacz Rozszerzanie modelu obiektów projektu podstawowego.
Agregacja wieloeziomowa
Implementacja podtypu projektu, która opakowuje podtyp projektu niższego poziomu, musi być zaprogramowana wspólnie, aby umożliwić prawidłowe działanie podtypu projektu wewnętrznego. Lista obowiązków programistycznych obejmuje:
Implementacja IPersistXMLFragment podtypu projektu opakowującego wewnętrzny podtyp musi delegować do IPersistXMLFragment implementacji podtypu projektu wewnętrznego dla metod Load i Save .
Implementacja IInternalExtenderProvider podtypu projektu otoki musi delegować do podtypu projektu wewnętrznego. W szczególności implementacja GetExtenderNames musi pobrać ciąg nazw z podtypu projektu wewnętrznego, a następnie połączyć ciągi, które chce dodać jako rozszerzenia.
Implementacja IVsProjectCfgProvider podtypu projektu otoki musi utworzyć wystąpienie IVsProjectFlavorCfg obiektu jego wewnętrznego podtypu projektu i przechowywać go jako delegat prywatny, ponieważ tylko obiekt konfiguracji projektu podstawowego bezpośrednio wie, że obiekt konfiguracji podtypu projektu otoki istnieje. Podtyp projektu zewnętrznego może początkowo wybierać interfejsy konfiguracji, które chce obsługiwać bezpośrednio, a następnie delegować resztę do wewnętrznej implementacji podtypu get_CfgTypeprojektu .
Interfejsy pomocnicze
Podstawowy projekt deleguje wywołania do interfejsów pomocniczych dodanych przez podtyp projektu w celu rozszerzenia różnych aspektów jego implementacji. Obejmuje to rozszerzanie obiektów konfiguracji projektu i różnych obiektów przeglądarki właściwości. Te interfejsy są pobierane przez wywołanie QueryInterface metody punkOuter (wskaźnik do IUnknown) najbardziej zewnętrznego agregatora podtypu projektu.
| Interfejs | Podtyp projektu |
|---|---|
| IVsProjectFlavorCfg | Umożliwia podtypowi projektu: — Podaj implementację elementu IVsDeployableProjectCfg. — Kontrolowanie uruchamiania debugera przez umożliwienie podtypowi projektu zapewnienia własnej implementacji IVsDebuggableProjectCfgprogramu . — Wyłącz ocenę wyrażenia w czasie projektowania, odpowiednio obsługując DBGLAUNCH_DesignTimeExprEval przypadek w implementacji elementu QueryDebugLaunch. |
| IInternalExtenderProvider | Umożliwia podtypowi projektu: — Rozszerzanie VSHPROPID_BrowseObject projektu w celu dodania lub usunięcia niezależnych właściwości konfiguracji projektu. — Rozszerzanie obiektu automatyzacji projektu (VSHPROPID_ExtObject) projektu. Powyższe wartości właściwości są pobierane z __VSHPROPID2 wyliczenia. |
| IVsCfgBrowseObject | Umożliwia podtypowi projektu mapowanie z powrotem na IVsCfg obiekt, biorąc pod uwagę obiekt przeglądania konfiguracji projektu. |
| IVsBrowseObject | Umożliwia podtypowi projektu mapowanie z powrotem na IVsHierarchy obiekt lub VSITEMID , biorąc pod uwagę obiekt przeglądania konfiguracji projektu. |
| IPersistXMLFragment | Umożliwia podtypowi projektu utrwalanie dowolnych danych ustrukturyzowanych XML do pliku projektu (vbproj lub csproj). Te dane nie są widoczne dla programu MSBuild. |
| IVsBuildPropertyStorage | Umożliwia podtypowi projektu: — Dodaj nowe właściwości programu MSBuild, które mają być utrwalane. — Usuń niepotrzebne właściwości z programu MSBuild. — Kwerenda dla bieżącej wartości właściwości MSBuild. - Zmień bieżącą wartość właściwości MSBuild. |