Udostępnij przez


Manifesty zestawów

Manifest zestawu to plik XML, który opisuje zestaw równoległy. Manifesty zestawów opisują nazwy i wersje zestawów równoległych, plików i zasobów zestawu, a także zależność zestawu od innych zestawów równoległych. Poprawna instalacja, aktywacja i wykonywanie zestawów równoległych wymaga, aby manifest zestawu zawsze towarzyszył zestawowi w systemie.

Aby uzyskać pełną listę schematu XML, zobacz Schemat pliku manifestu.

Manifesty zestawów mają następujące elementy i atrybuty.

Składnik Atrybuty Required
montaż Tak
manifestVersion Tak
noInheritable Nie.
assemblyIdentity Tak
typ Tak
nazwa Tak
Język Nie.
processorArchitecture Nie.
wersja Tak
publicKeyToken Nie.
zależności Nie.
zależneZasad Nie.
plik Nie.
nazwa Tak
hashalg Nie.
skrótu Nie.
comClass Nie.
opis Nie.
clsid Tak
threadingModel Nie.
tlbid Nie.
progid Nie.
miscStatus Nie.
miscStatusIcon Nie.
miscStatusContent Nie.
miscStatusDocPrint Nie.
miscStatusThumbnail Nie.
typelib Nie.
tlbid Tak
wersja Tak
helpdir Tak
resourceid Nie.
flagi Nie.
comInterfaceExternalProxyStub Nie.
identyfikator Tak
baseInterface Nie.
numMethods Nie.
nazwa Nie.
tlbid Nie.
proxyStubClsid32 Nie.
comInterfaceProxyStub Nie.
identyfikator Tak
nazwa Tak
tlbid Nie.
baseInterface Nie.
numMethods Nie.
proxyStubClsid32 Nie.
threadingModel Nie.
windowClass Nie.
w wersji Nie.

Lokalizacja pliku

Manifesty zestawów można zainstalować w trzech lokalizacjach:

  • Jako manifesty, które towarzyszą udostępnionym zestawom, manifesty zestawów powinny być instalowane jako oddzielny plik w pamięci podręcznej zestawów równoległych. Zazwyczaj jest to folder WinSxS w katalogu systemu Windows.
  • Manifesty, które towarzyszą zestawom prywatnym, manifesty zestawów powinny być instalowane w strukturze katalogów aplikacji. Zazwyczaj jest to oddzielny plik w tym samym folderze co plik wykonywalny aplikacji.
  • Jako zasób w dll zestaw jest dostępny do użytku prywatnego biblioteki DLL. Manifest zestawu nie może być uwzględniony jako zasób w pliku EXE. Plik EXE może zawierać manifest aplikacji jako zasób.

Składnia nazwy pliku

Nazwa manifestu zestawu to dowolna prawidłowa nazwa pliku, po której .manifestnastępuje .

Na przykład manifest zestawu, który odwołuje się do myassembly, będzie używać następującej składni nazwy pliku: myassembly.<resource ID>.manifest. Możesz pominąć <resource ID> pole, jeśli manifest zestawu jest instalowany jako oddzielny plik lub jeśli identyfikator zasobu to 1.

Uwaga / Notatka

Ze względu na sposób wyszukiwania równoległego dla zestawów prywatnych obowiązują następujące ograniczenia dotyczące nazewnictwa podczas pakowania biblioteki DLL jako zestawu prywatnego. Zalecanym sposobem wykonania tej czynności jest umieszczenie manifestu zestawu w dll jako zasobu. W takim przypadku identyfikator zasobu musi być równy 1, a nazwa zestawu prywatnego może być taka sama jak nazwa biblioteki DLL. Jeśli na przykład nazwa biblioteki DLL jest Microsoft.Windows.mysample.dll, wartość atrybutu name używanego w elemecie assemblyIdentity manifestu może być również microsoft.Windows.mysample. Alternatywnym sposobem jest umieszczenie manifestu zestawu w osobnym pliku. W takim przypadku nazwa zestawu i jego manifest muszą być inne niż nazwa biblioteki DLL. Na przykład Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest i Microsoft.Windows.Mysample.dll. Aby uzyskać więcej informacji na temat wyszukiwania równoległego dla zestawów prywatnych, zobacz Sekwencja wyszukiwania zestawów.

Pierwiastki

W nazwach elementów i atrybutów uwzględniana jest wielkość liter. Wartości elementów i atrybutów są bez uwzględniania wielkości liter, z wyjątkiem wartości atrybutu typu.

montaż

Element kontenera. Jego pierwszy podelement musi być elementem assemblyIdentity lub noInheritable . Manifest zestawu jednoznacznie opisuje zestaw side-by-side zidentyfikowany przez assemblyIdentity. To jest wymagane.

Element zestawu musi znajdować się w przestrzeni nazw "urn:schemas-microsoft-com:asm.v1". Elementy podrzędne zestawu muszą również znajdować się w tej przestrzeni nazw przez dziedziczenie lub tagowanie.

Element zestawu ma następujący atrybut.

Attribute Opis
manifestVersion Atrybut manifestVersion musi być ustawiony na 1.0.

noInheritable

Uwzględnij ten element w manifeście zestawu, aby wskazać, że zestaw zarządza kontekstami aktywacji i jego obiektami. Element noInheritable musi być podelementem elementu zestawu . Element assemblyIdentity powinien pochodzić po żadnym elemecie noInheritable . Element noInheritable jest wymagany w manifeście zestawu, jeśli zestaw jest używany przez dowolne manifesty aplikacji , które zawierają element noInherit . Element noInheritable w manifeście aplikacji nie ma efektu. Element noInheritable nie ma elementów podrzędnych.

assemblyIdentity

Opisuje i jednoznacznie identyfikuje zestaw równoległy.

Jako pierwszy podelement elementu zestawu , assemblyIdentity opisuje i jednoznacznie identyfikuje zestaw side-by-side, który jest właścicielem tego manifestu zestawu. Jest to nazywane zestawem kontekstu DEFIdentity manifestu zestawu.

Jako pierwszy podelement elementu dependentAssembly opisuje element assemblyIdentity i jednoznacznie identyfikuje zestaw równoległy, który jest używany przez zestaw def-contextIdentity. Jest to nazywane zestawem kontekstu REFIdentity manifestu zestawu. Zestaw kontekstu DEF wymaga poprawnego działania zestawu kontekstu REF. Należy pamiętać, że każdy element assemblyIdentity kontekstu REF musi dokładnie odpowiadać odpowiedniemu zestawowi kontekstu DEFIdentity w manifeście zestawu, do którego odwołuje się zestaw.

Ten element nie ma podelementów. Element assemblyIdentity ma następujące atrybuty.

Attribute Opis
typ Określa typ zestawu. Wartość musi być win32 i w małym przypadku. To jest wymagane.
nazwa Unikatowe nazwy zestawu. Użyj następującego formatu dla nazwy zestawu: Organization.Division.Name. Na przykład Microsoft.Windows.mysampleAsm. To jest wymagane. Należy pamiętać, że w przypadku biblioteki DLL spakowanej jako zestaw prywatny z oddzielnym plikiem manifestu nazwa zestawu musi być inna niż nazwa biblioteki DLL i manifestu.
Język Określa język zestawu. Opcjonalny. Jeśli zestaw jest specyficzny dla języka, określ kod języka DHTML. W zgromadzeniu kontekstu DEFIdentity manifestu zestawu przeznaczonego do użytku na całym świecie (neutralny język) pomija atrybut języka.
W zestawie kontekstowym REFDentyfikacja manifestu zestawu przeznaczonego do użytku na całym świecie (neutralna język) ustaw wartość języka na "*".
processorArchitecture Określa procesor. Prawidłowe wartości to x86 dla 32-bitowych systemów Windows i ia64 dla 64-bitowego systemu Windows. Opcjonalny.
wersja Określa wersję zestawu. Użyj formatu wersji czteroczęściowej: mmmmm.nnnnn.ooooo.ppppp. Każda z części rozdzielonych kropkami może wynosić od 0 do 65535 włącznie. Aby uzyskać więcej informacji, zobacz wersje zestawów. To jest wymagane.
publicKeyToken 16-znakowy ciąg szesnastkowy reprezentujący ostatnie 8 bajtów skrótu SHA-1 klucza publicznego, w ramach którego zestaw jest podpisany. Klucz publiczny używany do podpisywania wykazu musi mieć wartość 2048 bitów lub większą. Wymagane w przypadku zestawów współużytkowanych obok siebie.

zależności

Element kontenera, w tym co najmniej jeden element zależnyAssembly. Pierwszy podelement musi być elementem zależnymAssembly . Zależność nie ma atrybutów. Opcjonalny.

dependentAssembly

Pierwszy podelement musi być elementem assemblyIdentity , który opisuje i jednoznacznie identyfikuje zestaw side-by-side używany przez zestaw side-by-side, który jest właścicielem tego manifestu zestawu. Każda zależnośćAssembly musi znajdować się wewnątrz dokładnie jednej zależności. Opcjonalny.

plik

Zawiera pliki używane przez zestaw równoległy. Zawiera podelementy comClass, typelib, windowClass, comInterfaceProxyStub . Opcjonalny.

Element pliku ma następujące atrybuty.

Attribute Opis
nazwa Nazwa pliku, na przykład Conctl32.dll.
hashalg Algorytm używany do tworzenia skrótu pliku. Ta wartość powinna mieć wartość SHA1.
skrótu Skrót pliku, do której odwołuje się nazwa. Ciąg szesnastkowy długości w zależności od algorytmu skrótu.

comClass

Podelement elementu pliku . Opcjonalny.

Element comClass ma następujące atrybuty.

Attribute Opis
opis Nazwa klasy.
clsid Identyfikator GUID, który jednoznacznie identyfikuje klasę. To jest wymagane. Wartość musi być w formacie prawidłowego identyfikatora GUID.
threadingModel Model wątkowania używany przez klasy COM w procesie. Jeśli ta właściwość ma wartość null, nie jest używany żaden model wątkowania. Składnik jest tworzony w głównym wątku klienta, a wywołania z innych wątków są marshalowane do tego wątku. Opcjonalny. Prawidłowe wartości to: "Apartment", "Free", "Both" i "Neutral".
tlbid Identyfikator GUID biblioteki typów dla tego składnika COM. Wartość musi być w formacie identyfikatora GUID. Opcjonalny.
progid Identyfikator programowy zależny od wersji skojarzony ze składnikiem COM. Format identyfikatora progID to <dostawca>.<składnik>.<wersja>.
miscStatus Duplikaty w manifeście zestawu informacje dostarczone przez klucz rejestru MiscStatus. Jeśli nie można odnaleźć wartości miscStatusIcon, miscStatusContent, miscStatusDocprint lub miscStatusThumbnail atrybutów, odpowiednia wartość domyślna wymieniona w miscStatus jest używana dla brakujących atrybutów. Wartość może być rozdzielaną przecinkami listą wartości atrybutów z poniższej tabeli. Tego atrybutu można użyć, jeśli klasa COM jest klasą OCX, która wymaga wartości klucza rejestru Miscstatus.
miscStatusIcon Duplikaty w manifeście zestawu informacje dostarczone przez DVASPECT_ICON. Może on podać ikonę obiektu. Wartość może być rozdzielaną przecinkami listą wartości atrybutów z poniższej tabeli. Tego atrybutu można użyć, jeśli klasa COM jest klasą OCX, która wymaga wartości klucza rejestru Miscstatus.
miscStatusContent Duplikaty w manifeście zestawu informacje dostarczone przez DVASPECT_CONTENT. Może zapewnić dokument złożony do wyświetlania na ekranie lub drukarce. Wartość może być rozdzielaną przecinkami listą wartości atrybutów z poniższej tabeli. Tego atrybutu można użyć, jeśli klasa COM jest klasą OCX, która wymaga wartości klucza rejestru Miscstatus.
miscStatusDocprint Duplikaty w manifeście zestawu informacje dostarczone przez DVASPECT_DOCPRINT. Może ona zapewnić reprezentację obiektu wyświetlaną na ekranie tak, jakby była drukowana na drukarce. Wartość może być rozdzielaną przecinkami listą wartości atrybutów z poniższej tabeli. Tego atrybutu można użyć, jeśli klasa COM jest klasą OCX, która wymaga wartości klucza rejestru Miscstatus.
miscStatusThumbnail Duplikaty w manifeście zestawu informacje dostarczone przez DVASPECT_THUMBNAIL. Może on udostępnić miniaturę obiektu, który można wyświetlić w narzędziu przeglądania. Wartość może być rozdzielaną przecinkami listą wartości atrybutów z poniższej tabeli. Tego atrybutu można użyć, jeśli klasa COM jest klasą OCX, która wymaga wartości klucza rejestru Miscstatus.

Element comClass może mieć <identyfikator progid>... elementy jako elementy podrzędne, które zawierają listę progidów zależnych wersji.

W poniższym przykładzie przedstawiono element comClass dołączony do elementu pliku .

<file name="sampleu.dll">
        <comClass description="Font Property Page"
    clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"
          threadingModel = "Both"
             tlbid = "{44EC0535-400F-11D0-9DCD-00A0C90391D3}"/>
        <comClass description="Color Property Page"
    clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}" 
    progid="ABC.Registrar"/>
    </file>

Jeśli klasa COM jest klasą OCX, która wymaga podklucza rejestru MiscStatus w celu określenia sposobu tworzenia i wyświetlania obiektu, można włączyć obiekt, duplikując te informacje w manifeście zestawu. Określ cechy obiektu przy użyciu atrybutów miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint i miscStatusThumbnail elementu comClass. Ustaw te atrybuty na rozdzielaną przecinkami listę wartości atrybutów z poniższej tabeli. Te atrybuty zduplikowane informacje, które zostałyby dostarczone przez wyliczenie DVASPECT. Jeśli nie znaleziono żadnej wartości dla miscStatusIcon, miscStatusContent, miscStatusDocprint lub miscStatusThumbnail, są używane wartości domyślne określone w miscStatus . Użyj wartości atrybutów z poniższej tabeli. Odpowiadają one flagom bitowym wyliczenia OLEMISC .

Wartość atrybutu Stała OLEMISC
recomposeonresize OLEMISC_RECOMPOSEONRESIZE
onlyiconic OLEMISC_ONLYICONIC
insertnotreplace OLEMISC_INSERTNOTREPLACE
statyczny OLEMISC_STATIC
cantlinkinside OLEMISC_CANTLINKINSIDE
canlinkbyole1 OLEMISC_CANLINKBYOLE1
islinkobject OLEMISC_ISLINKOBJECT
wewnątrz OLEMISC_INSIDEOUT
activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE
renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT
invisibleatruntime OLEMISC_INVISIBLEATRUNTIME
zawsze uruchamiaj OLEMISC_ALWAYSRUN
aktlikebutton OLEMISC_ACTSLIKEBUTTON
dzlikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
dopasowywalny OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

typelib

Podelement elementu pliku . Opcjonalny.

Element typelib zawiera atrybuty pokazane w poniższej tabeli.

Attribute Opis
tlbid Unikatowy identyfikator biblioteki typów. To jest wymagane.
wersja Dwuczęściowy numer wersji biblioteki typów. Jeśli tylko numer wersji pomocniczej zostanie zwiększony, wszystkie funkcje poprzedniej biblioteki typów są obsługiwane w zgodny sposób. Jeśli numer wersji głównej ulegnie zmianie, należy ponownie skompilować kod skompilowany dla biblioteki typów. Numer wersji biblioteki typów może różnić się od numeru wersji aplikacji. To jest wymagane.
helpdir Katalog, w którym znajduje się plik Pomocy dla typów w bibliotece typów. Jeśli aplikacja obsługuje biblioteki typów dla wielu języków, biblioteki mogą odwoływać się do różnych nazw plików w katalogu plików Pomocy. Jeśli nie ma wartości, określ wartość "". To jest wymagane.
resourceid Reprezentacja ciągu szesnastkowego identyfikatora ustawień regionalnych (LCID). Jest to jedna do czterech cyfr szesnastkowe bez prefiksu 0x i bez zer wiodących. Identyfikator LCID może mieć neutralny identyfikator podjęzyczności. Aby uzyskać więcej informacji, zobacz Identyfikatory ustawień regionalnych. Opcjonalny.
flagi Reprezentacja ciągu flag biblioteki typów dla tej biblioteki typów. W szczególności powinno to być jedno z "OGRANICZONYch", "CONTROL", "HIDDEN" i "HASDISKIMAGE". Są to wartości wyliczenia LIBFLAGS i są tymi samymi flagami określonymi w parametrze uLibFlags metody ICreateTypeLib::SetLibFlags . Opcjonalny.

W poniższym przykładzie przedstawiono element typelib dołączony do elementu pliku .

<file name="sampleu.dll">
       <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}"
       version="1.0" helpdir=""/>
</file>

comInterfaceExternalProxyStub

ComInterfaceExternalProxyStub jest podelementem elementu zestawu i służy do interfejsów automatyzacji. Na przykład IDispatch i jego interfejsy pochodne. Opcjonalny.

Domyślna implementacja łącznika proxy jest odpowiednia dla większości interfejsów automatyzacji, takich jak interfejsy pochodzące z interfejsów IDispatch. Łącznik serwera proxy interfejsu i wszystkie inne zewnętrzne implementacje interfejsu zastępczego serwera proxy muszą być wymienione w pliku comInterfaceExternalProxyStub. Element comInterfaceExternalProxyStub ma atrybuty pokazane w poniższej tabeli.

Attribute Opis
identyfikator Identyfikator IID interfejsu, dla którego jest zadeklarowany serwer proxy. To jest wymagane. Wartość powinna być w postaci: "{iid}".
baseInterface Identyfikator IID interfejsu, z którego pochodzi ten opisany przez atrybut iid . Ten atrybut jest opcjonalny. Wartość powinna być w postaci: "{iid}".
numMethods Liczba metod implementowanych przez interfejs. Ten atrybut jest opcjonalny. Wartość powinna mieć postać: "n".
nazwa Nazwa interfejsu, tak jak w kodzie. Na przykład "IViewObject". Nie powinno to być ciąg opisowy. Ten atrybut jest opcjonalny. Wartość powinna mieć postać: "name".
tlbid Biblioteka typów zawierająca opis interfejsu określonego przez atrybut iid . Ten atrybut jest opcjonalny. Wartość powinna mieć postać: "{tlbid}".
proxyStubClsid32 Mapuje identyfikator IID na identyfikator CLSID w 32-bitowych bibliotekach DLL serwera proxy.

W poniższym przykładzie przedstawiono element comInterfaceExternalProxyStub .

<comInterfaceExternalProxyStub 
  name="IAxWinAmbientDispatch" 
    iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" 
    numMethods="35" 
  baseInterface="{00000000-0000-0000-C000-000000000046}"/>

comInterfaceProxyStub

Podelement elementu pliku . Opcjonalny.

Jeśli plik w zestawie implementuje wycinkę serwera proxy, odpowiedni tag pliku musi zawierać podelement comInterfaceProxyStub o atrybutach identycznych z elementem comInterfaceProxyStub . Przeprowadzanie marshalingu interfejsów między procesami i wątkami może nie działać zgodnie z oczekiwaniami, jeśli pominięto niektóre zależności comInterfaceProxyStub dla składnika.

Element comInterfaceProxyStub ma następujące atrybuty.

Attribute Opis
identyfikator Ten. Identyfikator IID interfejsu, dla którego jest zadeklarowany serwer proxy. To jest wymagane. Wartość powinna być w postaci: "{iid}".
nazwa Nazwa interfejsu, tak jak w kodzie. Na przykład "IViewObject". Nie powinno to być ciąg opisowy. Ten atrybut jest opcjonalny. Wartość powinna mieć postać: "name".
tlbid Biblioteka typów zawierająca opis interfejsu określonego przez atrybut iid . Ten atrybut jest opcjonalny. Wartość powinna mieć postać: "{tlbid}".
baseInterface Identyfikator IID interfejsu, z którego pochodzi ten opisany przez atrybut iid . Ten atrybut jest opcjonalny. Wartość powinna być w postaci: "{iid}".
numMethods Liczba metod implementowanych przez interfejs. Ten atrybut jest opcjonalny. Wartość powinna mieć postać: "n".
proxyStubClsid32 Mapuje identyfikator IID na identyfikator CLSID w 32-bitowych bibliotekach DLL serwera proxy.
threadingModel Model wątkowania używany przez klasy COM w procesie. Jeśli ta właściwość ma wartość null, nie jest używany żaden model wątkowania. Składnik jest tworzony w głównym wątku klienta, a wywołania z innych wątków są marshalowane do tego wątku. Opcjonalny. Prawidłowe wartości to: "Apartment", "Free", "Both" i "Neutral".

windowclass

Nazwa klasy systemu Windows, która ma być wersjonowana. Element windowclass ma następujący atrybut.

Attribute Opis
w wersji Ten atrybut określa, czy wewnętrzna nazwa klasy okien używana w rejestracji zawiera wersję zestawu zawierającego klasę okien. Wartość tego atrybutu może mieć wartość "yes" lub "no". Wartość domyślna to "yes". Wartość "nie" powinna być używana tylko wtedy, gdy ta sama klasa okna jest definiowana przez składnik side-by-side i równoważny składnik inny niż side-by-side i chcesz traktować je jako tę samą klasę okna. Należy pamiętać, że zwykłe reguły dotyczące rejestracji klas okien dotyczą tylko pierwszego składnika, który rejestruje klasę okien, będzie mógł ją zarejestrować, ponieważ nie jest ona wersjonowana.

W poniższym przykładzie pokazano element windowclass dołączony do elementu pliku .

<file name="comctl32.dll">
        <windowClass versioned="no">ToolbarWindow32</windowClass>
</file>

Przykład

Poniżej przedstawiono przykład manifestu zestawu.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Microsoft.Tools.SampleAssembly" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/>
    <file name="sampleu.dll" hash="3eab067f82504bf271ed38112a4ccdf46094eb5a" hashalg="SHA1">
        <comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Picture Property Page" clsid="{0BE35202-8F91-11CE-9DE3-00AA004BB851}"/>
    </file>
    <file name="bar.dll" hash="ac72753e5bb20446d88a48c8f0aaae769a962338" hashalg="SHA1"/>
    <file name="foo.dll" hash="a7312a1f6cfb46433001e0540458de60adcd5ec5" hashalg="SHA1">
        <comClass description="Registrar Class" clsid="{44EC053A-400F-11D0-9DCD-00A0C90391D3}" progid="ATL.Registrar"/>
    <comInterfaceProxyStub iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" name=" IAxWinAmbientDispatch " tlbid="{34EC053A-400F-11D0-9DCD-00A0C90391D3}"/>
        <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/>
    </file>
    <file name="sampledll.dll" hash="ba62960ceb15073d2598379307aad84f3a73dfcb" hashalg="SHA1"/>
<windowClass>ToolbarWindow32</windowClass>
        <windowClass>ComboBoxEx32</windowClass>
        <windowClass>sample_trackbar32</windowClass>
        <windowClass>sample_updown32</windowClass>
</assembly>