Assemblymanifeste
Ein Assemblymanifest ist eine XML-Datei, die eine parallele Assembly beschreibt. Assemblymanifeste beschreiben die Namen und Versionen von parallelen Assemblys, Dateien und Ressourcen der Assembly sowie die Abhängigkeit der Assembly von anderen parallelen Assemblys. Die korrekte Installation, Aktivierung und Ausführung von parallelen Assemblys erfordert, dass das Assemblymanifest immer eine Assembly im System begleitet.
Eine vollständige Auflistung des XML-Schemas finden Sie unter Manifestdateischema.
Assemblymanifeste verfügen über die folgenden Elemente und Attribute.
Element | Attribute | Erforderlich |
---|---|---|
Versammlung | Ja | |
manifestVersion | Ja | |
noInheritable | Nein | |
assemblyIdentity | Ja | |
type | Ja | |
name | Ja | |
language | Nein | |
Processorarchitecture | Nein | |
version | Ja | |
publicKeyToken | Nein | |
Abhängigkeit | Nein | |
dependentAssembly | Nein | |
datei | Nein | |
name | Ja | |
Hashalg | Nein | |
hash | Nein | |
comClass | Nein | |
description | Nein | |
Clsid | Ja | |
threadingModel | Nein | |
tlbid | Nein | |
Progid | Nein | |
miscStatus | Nein | |
miscStatusIcon | Nein | |
miscStatusContent | Nein | |
miscStatusDocPrint | Nein | |
miscStatusThumbnail | Nein | |
typelib | Nein | |
tlbid | Ja | |
version | Ja | |
helpdir | Ja | |
Resourceid | Nein | |
flags | Nein | |
comInterfaceExternalProxyStub | Nein | |
Iid | Ja | |
baseInterface | Nein | |
numMethods | Nein | |
name | Nein | |
tlbid | Nein | |
proxyStubClsid32 | Nein | |
comInterfaceProxyStub | Nein | |
Iid | Ja | |
name | Ja | |
tlbid | Nein | |
baseInterface | Nein | |
numMethods | Nein | |
proxyStubClsid32 | Nein | |
threadingModel | Nein | |
windowClass | Nein | |
Versionierte | Nein |
Speicherort
Assemblymanifeste können an drei Speicherorten installiert werden:
- Als Manifeste, die freigegebene Assemblys begleiten, sollten Assemblymanifeste als separate Datei im parallelen Assemblycache installiert werden. Dies ist in der Regel der Ordner WinSxS im Windows-Verzeichnis.
- Als Manifeste, die private Assemblys begleiten, sollten Assemblymanifeste in der Verzeichnisstruktur der Anwendung installiert werden. Dies ist in der Regel eine separate Datei im selben Ordner wie die ausführbare Datei der Anwendung.
- Als Ressource in einer DLL ist die Assembly für die private Verwendung der DLL verfügbar. Ein Assemblymanifest kann nicht als Ressource in eine EXE-Datei eingeschlossen werden. Eine EXE-Datei kann ein Anwendungsmanifest als Ressource enthalten.
Dateinamensyntax
Der Name eines Assemblymanifests ist ein beliebiger gültiger Dateiname gefolgt von .manifest
.
Ein Assemblymanifest, das auf myassembly verweist, würde beispielsweise die folgende Dateinamensyntax verwenden: myassembly.<resource ID>.manifest
.
Sie können das <resource ID>
Feld weglassen, wenn das Assemblymanifest als separate Datei installiert wird oder wenn die Ressourcen-ID 1 ist.
Hinweis
Aufgrund der Art und Weise, wie parallel nach privaten Assemblys gesucht wird, gelten beim Packen einer DLL als private Assembly die folgenden Benennungseinschränkungen. Eine empfohlene Möglichkeit hierfür ist das Einfügen des Assemblymanifests in der DLL als Ressource. In diesem Fall muss die Ressourcen-ID gleich 1 sein, und der Name der privaten Assembly kann dem Namen der DLL entsprechen. Wenn der Name der DLL beispielsweise Microsoft.Windows.mysample.dll ist, kann der Wert des name-Attributs, das im assemblyIdentity-Element des Manifests verwendet wird, auch Microsoft.Windows.mysample sein. Eine alternative Möglichkeit besteht darin, das Assemblymanifest in einer separaten Datei zu speichern. In diesem Fall müssen sich der Name der Assembly und deren Manifest vom Namen der DLL unterscheiden. Beispielsweise Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest und Microsoft.Windows.Mysample.dll. Weitere Informationen zur parallelen Suche nach privaten Assemblys finden Sie unter Assemblysuchsequenz.
Elemente
Bei Namen von Elementen und Attributen wird die Groß-/Kleinschreibung beachtet. Bei den Werten von Elementen und Attributen wird die Groß-/Kleinschreibung nicht beachtet, mit Ausnahme des Werts des Typattributes.
-
Versammlung
-
Ein Containerelement. Das erste Unterelement muss ein assemblyIdentity- oder noInheritable-Element sein. Das Assemblymanifest beschreibt eindeutig die durch assemblyIdentity identifizierte parallele Assembly. Erforderlich.
Das Assemblyelement muss sich im Namespace "urn:schemas-microsoft-com:asm.v1" befinden. Untergeordnete Elemente der Assembly müssen sich ebenfalls in diesem Namespace befinden, durch Vererbung oder durch Tagging.
Das Assemblyelement verfügt über das folgende Attribut.
attribute Beschreibung manifestVersion Das manifestVersion-Attribut muss auf 1.0 festgelegt werden. -
noInheritable
-
Schließen Sie dieses Element in ein Assemblymanifest ein, um anzugeben, dass die Assembly die Aktivierungskontexte und ihre Objekte verwaltet. Das noInheritable-Element muss ein Unterelement eines Assemblyelements sein. Das assemblyIdentity-Element sollte nach jedem noInheritable-Element kommen. Das noInheritable-Element ist im Assemblymanifest erforderlich, wenn die Assembly von Anwendungsmanifesten verwendet wird, die das noInherit-Element enthalten. Ein noInheritable-Element in einem Anwendungsmanifest hat keine Auswirkung. Ein noInheritable-Element verfügt über keine untergeordneten Elemente.
-
Assemblyidentity
-
Beschreibt eine parallele Assembly und identifiziert sie eindeutig.
Als erstes Unterelement eines Assemblyelements beschreibt assemblyIdentity die parallele Assembly, die dieses Assemblymanifest besitzt, und identifiziert sie eindeutig. Dies wird als DEF-context assemblyIdentity des Assemblymanifests bezeichnet.
Als erstes Unterelement eines dependentAssembly-Elements beschreibt und identifiziert assemblyIdentity eindeutig eine parallele Assembly, die von der DEF-context assemblyIdentity verwendet wird. Dies wird als REF-context assemblyIdentity des Assemblymanifests bezeichnet. Die DEF-Kontextassembly erfordert, dass die REF-context-Assembly ordnungsgemäß funktioniert. Beachten Sie, dass jede REF-context assemblyIdentity genau mit einer entsprechenden DEF-kontext assemblyIdentity im eigenen Assemblymanifest der Assembly übereinstimmen muss, auf die verwiesen wird.
Dieses Element verfügt über keine Unterelemente. Das assemblyIdentity-Element weist die folgenden Attribute auf.
attribute BESCHREIBUNG type Gibt den Assemblytyp an. Der Wert muss win32 und in Kleinbuchstaben sein. Erforderlich. name Benennt die Assembly eindeutig. Verwenden Sie das folgende Format für den Assemblynamen: Organization.Division.Name. Beispiel: Microsoft.Windows.mysampleAsm. Erforderlich. Beachten Sie, dass im Fall einer DLL, die als private Assembly mit einer separaten Manifestdatei verpackt ist, der Name der Assembly vom Namen der DLL und des Manifests abweichen muss. language Gibt die Sprache der Assembly an. Optional. Wenn die Assembly sprachspezifisch ist, geben Sie den DHTML-Sprachcode an. In der DEF-context assemblyIdentity eines Assemblymanifests, das für die weltweite Verwendung bestimmt ist (sprachneutral), lassen Sie das Sprachattribute aus.
Legen Sie in einem REF-Kontext assemblyIdentity eines Assemblymanifests für die weltweite Verwendung (sprachneutral) den Wert der Sprache auf "*" fest.Processorarchitecture Gibt den Prozessor an. Die gültigen Werte sind x86 für 32-Bit-Windows und ia64 für 64-Bit-Windows. Optional. version Gibt die Assemblyversion an. Verwenden Sie das vierteilige Versionsformat: mmmmm.nnnnnn.ooooo.ppppp. Jeder der Teile, die durch Zeiträume getrennt sind, kann 0 bis 65535 einschließlich sein. Weitere Informationen finden Sie unter Assemblyversionen. Erforderlich. publicKeyToken Eine 16-stellige Hexadezimalzeichenfolge, die die letzten 8 Bytes des SHA-1-Hash des öffentlichen Schlüssels darstellt, unter dem die Assembly signiert ist. Der öffentliche Schlüssel, der zum Signieren des Katalogs verwendet wird, muss mindestens 2048 Bit sein. Erforderlich für freigegebene parallele Assemblys. -
Abhängigkeit
-
Ein Containerelement, das mindestens eine dependentAssembly enthält. Das erste Unterelement muss ein dependentAssembly-Element sein. Eine Abhängigkeit weist keine Attribute auf. Optional.
-
Dependentassembly
-
Das erste Unterelement muss ein assemblyIdentity-Element sein, das eine parallele Assembly beschreibt und eindeutig identifiziert, die von der parallelen Assembly verwendet wird, die dieses Assemblymanifest besitzt. Jede dependentAssembly muss sich innerhalb genau einer Abhängigkeit befinden. Optional.
-
Datei
-
Enthält Dateien, die von einer parallelen Assembly verwendet werden. Enthält die Unterelemente comClass, typelib, windowClass, comInterfaceProxyStub . Optional.
Das file-Element verfügt über die folgenden Attribute.
attribute Beschreibung name Name der Datei, z. B. Conctl32.dll. Hashalg Algorithmus, der verwendet wird, um einen Hash der Datei zu erstellen. Dieser Wert sollte SHA1 sein. hash Ein Hash der Datei, auf die anhand des Namens verwiesen wird. Eine hexadezimale Zeichenfolge der Länge abhängig vom Hashalgorithmus. -
comClass
-
Ein Unterelement eines Dateielements . Optional.
Das comClass-Element weist die folgenden Attribute auf.
attribute BESCHREIBUNG description Klassenname. Clsid Die GUID, die die -Klasse eindeutig identifiziert. Erforderlich. Der Wert muss im Format einer gültigen GUID vorliegen. threadingModel Das von prozessinternen COM-Klassen verwendete Threadingmodell. Wenn diese Eigenschaft NULL ist, wird kein Threadingmodell verwendet. Die Komponente wird im Hauptthread des Clients erstellt, und Aufrufe von anderen Threads werden an diesen Thread gemarshallt. Optional. Gültige Werte sind: "Apartment", "Free", "Both" und "Neutral". tlbid Die GUID für die Typbibliothek dieser Komponente. Der Wert muss im Format einer GUID vorliegen. Optional. Progid Versionsabhängiger programmgesteuerter Bezeichner, der der COM-Komponente zugeordnet ist. Das Format einer ProgID ist <vendor>.<-Komponente.><-Version>. miscStatus Dupliziert im Assemblymanifest die informationen, die vom Registrierungsschlüssel MiscStatus bereitgestellt werden. Wenn Werte für die Attribute miscStatusIcon, miscStatusContent, miscStatusDocprint oder miscStatusThumbnail nicht gefunden werden, wird der entsprechende Standardwert in miscStatus für die fehlenden Attribute verwendet. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert. miscStatusIcon Dupliziert im Assemblymanifest die Informationen, die von DVASPECT_ICON bereitgestellt werden. Es kann ein Symbol eines Objekts bereitstellen. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert. miscStatusContent Dupliziert im Assemblymanifest die Informationen, die von DVASPECT_CONTENT bereitgestellt werden. Es kann ein Verbunddokument bereitstellen, das für einen Bildschirm oder Drucker angezeigt werden kann. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert. miscStatusDocprint Dupliziert im Assemblymanifest die Informationen, die von DVASPECT_DOCPRINT bereitgestellt werden. Es kann eine Objektdarstellung bereitstellen, die auf dem Bildschirm angezeigt werden kann, als ob sie auf einen Drucker gedruckt wäre. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert. miscStatusThumbnail Dupliziert in einem Assemblymanifest die Informationen, die von DVASPECT_THUMBNAIL bereitgestellt werden. Es kann eine Miniaturansicht eines Objekts bereitstellen, das in einem Browsertool angezeigt werden kann. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert. Das comClass-Element kann progid>...-Elemente als untergeordnete Elemente enthalten<, die die versionsabhängigen Progids auflisten.
Das folgende Beispiel zeigt ein comClass-Element , das in einem Dateielement enthalten ist.
<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>
Wenn ihre COM-Klasse eine OCX-Klasse ist, für die der Registrierungsunterschlüssel MiscStatus angegeben werden muss, wie ein Objekt erstellt und angezeigt werden soll, können Sie das Objekt aktivieren, indem Sie diese Informationen im Assemblymanifest duplizieren. Geben Sie die Eigenschaften des Objekts mithilfe der Attribute miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint und miscStatusThumbnail des comClass-Elements an. Legen Sie diese Attribute auf eine durch Trennzeichen getrennte Liste von Attributwerten aus der folgenden Tabelle fest. Diese Attribute duplizieren die Informationen, die von einer DVASPECT-Enumeration bereitgestellt würden. Wenn für miscStatusIcon, miscStatusContent, miscStatusDocprint oder miscStatusThumbnail kein Wert gefunden wird, werden die in miscStatus angegebenen Standardwerte verwendet. Verwenden Sie Attributwerte aus der folgenden Tabelle. Diese entsprechen den Bitflags einer OLEMISC-Enumeration .
Attributwert OLEMISC-Konstante recomposeonresize OLEMISC_RECOMPOSEONRESIZE onlyiconic OLEMISC_ONLYICONIC insertnotreplace OLEMISC_INSERTNOTREPLACE static OLEMISC_STATIC cantlinkinside OLEMISC_CANTLINKINSIDE canlinkbyole1 OLEMISC_CANLINKBYOLE1 islinkobject OLEMISC_ISLINKOBJECT insideout OLEMISC_INSIDEOUT activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT invisibleatruntime OLEMISC_INVISIBLEATRUNTIME alwaysrun OLEMISC_ALWAYSRUN actslikebutton OLEMISC_ACTSLIKEBUTTON actslikelabel OLEMISC_ACTSLIKELABEL nouiactivate OLEMISC_NOUIACTIVATE Justierbar OLEMISC_ALIGNABLE simpleframe OLEMISC_SIMPLEFRAME setclientsitefirst OLEMISC_SETCLIENTSITEFIRST Imemode TOLEMISC_IMEMODE ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE wantstomenumerge OLEMISC_WANTSTOMENUMERGE supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO -
Typelib
-
Ein Unterelement eines Dateielements . Optional.
Das typelib-Element enthält die Attribute, die in der folgenden Tabelle aufgeführt sind.
attribute Beschreibung tlbid Die eindeutige ID der Typbibliothek. Erforderlich. version Die zweiteilige Versionsnummer der Typbibliothek. Wenn nur die Nebenversionsnummer zunimmt, werden alle Features der vorherigen Typbibliothek auf kompatible Weise unterstützt. Wenn sich die Hauptversionsnummer ändert, muss Code, der für die Typbibliothek kompiliert wurde, neu kompiliert werden. Die Versionsnummer der Typbibliothek kann von der Versionsnummer der Anwendung abweichen. Erforderlich. helpdir Das Verzeichnis, in dem sich die Hilfedatei für die Typen in der Typbibliothek befindet. Wenn die Anwendung Typbibliotheken für mehrere Sprachen unterstützt, verweisen die Bibliotheken möglicherweise auf verschiedene Dateinamen im Verzeichnis der Hilfedatei. Wenn kein Wert vorhanden ist, geben Sie "" an. Erforderlich. Resourceid Die hexadezimale Zeichenfolgendarstellung des Gebietsschemabezeichners (Locale Identifier, LCID). Es handelt sich um ein bis vier Hexadezimalstellen ohne Präfix 0x und ohne führende Nullen. Die LCID kann über einen neutralen Untersprachbezeichner verfügen. Weitere Informationen finden Sie unter Gebietsschemabezeichner. Optional. flags Die Zeichenfolgendarstellung der Flags der Typbibliothek für diese Typbibliothek. Genauer gesagt: Es sollte sich um „RESTRICTED“, „CONTROL“, „HIDDEN“ oder „HASDISKIMAGE“ handeln. Dies sind die Werte der LIBFLAGS-Enumeration und die gleichen Flags, die im uLibFlags-Parameter der ICreateTypeLibLib::SetLibFlags-Methode angegeben sind. Optional. Das folgende Beispiel zeigt ein typelib-Element , das in einem Dateielement enthalten ist.
<file name="sampleu.dll"> <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/> </file>
-
comInterfaceExternalProxyStub
-
ComInterfaceExternalProxyStub ist ein Unterelement eines Assemblyelements und wird für Automatisierungsschnittstellen verwendet. Beispiel : IDispatch und die abgeleiteten Schnittstellen. Optional.
Die Standardmäßige Proxy-Stub-Implementierung ist für die meisten Automatisierungsschnittstellen geeignet, z. B. für von IDispatch abgeleitete Schnittstellen. Der Schnittstellenproxy-Stub und alle anderen externen Proxy-Stub-Schnittstellenimplementierungen müssen in comInterfaceExternalProxyStub aufgeführt werden. Das comInterfaceExternalProxyStub-Element verfügt über die in der folgenden Tabelle aufgeführten Attribute.
attribute Beschreibung Iid Die IID der Schnittstelle, für die der Proxy deklariert wird. Erforderlich. Der Wert sollte in der Form "{iid}" vorliegen. baseInterface Die IID der Schnittstelle, von der die durch das iid-Attribut beschriebene schnittstelle abgeleitet wird. Dieses Attribut ist optional. Der Wert sollte in der Form "{iid}" vorliegen. numMethods Die Anzahl der von der Schnittstelle implementierten Methoden. Dieses Attribut ist optional. Der Wert sollte in der Form "n" vorliegen. name Name der Schnittstelle, wie sie im Code angezeigt wird. Beispiel: "IViewObject". Dies sollte keine beschreibende Zeichenfolge sein. Dieses Attribut ist optional. Der Wert sollte in der Form "name" vorliegen. tlbid Die Typbibliothek, die die Beschreibung der durch das iid-Attribut angegebenen Schnittstelle enthält. Dieses Attribut ist optional. Der Wert sollte in der Form "{tlbid}" vorliegen. proxyStubClsid32 Ordnet eine IID einer CLSID in 32-Bit-Proxy-DLLs zu. Das folgende Beispiel zeigt ein comInterfaceExternalProxyStub-Element .
<comInterfaceExternalProxyStub name="IAxWinAmbientDispatch" iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" numMethods="35" baseInterface="{00000000-0000-0000-C000-000000000046}"/>
-
comInterfaceProxyStub
-
Ein Unterelement eines Dateielements . Optional.
Wenn eine Datei in der Assembly einen Proxy-Stub implementiert, muss das entsprechende Dateitag ein comInterfaceProxyStub-Unterelement mit Attributen enthalten, die mit einem comInterfaceProxyStub-Element identisch sind. Das Marshallen von Schnittstellen zwischen Prozessen und Threads funktioniert möglicherweise nicht wie erwartet, wenn Sie einige der comInterfaceProxyStub-Abhängigkeiten für Ihre Komponente weglassen.
Das comInterfaceProxyStub-Element weist die folgenden Attribute auf.
attribute Beschreibung Iid Das. IID der Schnittstelle, für die der Proxy deklariert wird. Erforderlich. Der Wert sollte in der Form "{iid}" vorliegen. name Name der Schnittstelle, wie sie im Code angezeigt wird. Beispiel: "IViewObject". Dies sollte keine beschreibende Zeichenfolge sein. Dieses Attribut ist optional. Der Wert sollte in der Form "name" vorliegen. tlbid Die Typbibliothek, die die Beschreibung der durch das iid-Attribut angegebenen Schnittstelle enthält. Dieses Attribut ist optional. Der Wert sollte in der Form "{tlbid}" vorliegen. baseInterface Die IID der Schnittstelle, von der die durch das iid-Attribut beschriebene schnittstelle abgeleitet wird. Dieses Attribut ist optional. Der Wert sollte in der Form "{iid}" vorliegen. numMethods Die Anzahl der von der Schnittstelle implementierten Methoden. Dieses Attribut ist optional. Der Wert sollte in der Form "n" vorliegen. proxyStubClsid32 Ordnet eine IID einer CLSID in 32-Bit-Proxy-DLLs zu. threadingModel Das von prozessinternen COM-Klassen verwendete Threadingmodell. Wenn diese Eigenschaft NULL ist, wird kein Threadingmodell verwendet. Die Komponente wird im Hauptthread des Clients erstellt, und Aufrufe von anderen Threads werden an diesen Thread gemarshallt. Optional. Gültige Werte sind: "Apartment", "Free", "Both" und "Neutral". -
Windowclass
-
Der Name einer Windows-Klasse, die versioniert werden soll. Das windowclass-Element weist das folgende Attribut auf.
attribute Beschreibung Versionierte Dieses Attribut steuert, ob der in der Registrierung verwendete name der internen Fensterklasse die Version der Assembly enthält, die die Fensterklasse enthält. Der Wert dieses Attributs kann "ja" oder "nein" sein. Der Standardwert ist "ja". Der Wert "no" sollte nur verwendet werden, wenn dieselbe Fensterklasse durch eine parallele Komponente und eine entsprechende nicht parallele Komponente definiert ist und Sie diese als dieselbe Fensterklasse behandeln möchten. Beachten Sie, dass die üblichen Regeln für die Fensterklassenregistrierung nur für die erste Komponente gelten, die die Fensterklasse registriert, kann sie registriert werden, da sie nicht versioniert ist. Das folgende Beispiel zeigt ein windowclass-Element , das in einem Dateielement enthalten ist.
<file name="comctl32.dll"> <windowClass versioned="no">ToolbarWindow32</windowClass> </file>
Beispiel
Es folgt ein Beispiel für ein Assemblymanifest.
<?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>