Gewusst wie: Konfigurieren von .NET-Komponenten für eine Aktivierung ohne Registrierung
Aktualisiert: November 2007
Die Aktivierung ohne Registrierung ist bei .NET-Komponenten nur geringfügig schwieriger als bei COM-Komponenten. Für das Setup sind zwei Manifeste erforderlich:
COM-Anwendungen müssen über ein Win32-Anwendungsmanifest verfügen, um die verwaltete Komponente zu bestimmen.
.NET-Komponenten müssen über ein Komponentenmanifest mit den zur Laufzeit erforderlichen Aktivierungsinformationen verfügen.
In diesem Thema werden das Zuordnen eines Anwendungsmanifests zu einer Anwendung, das Zuordnen eines Komponentenmanifests zu einer Komponente und das Einbetten eines Komponentenmanifests in eine Assembly beschrieben.
So erstellen Sie ein Anwendungsmanifest
Erstellen oder bearbeiten Sie mit einem XML-Editor das Anwendungsmanifest der COM-Anwendung, die mit einer oder mehreren verwalteten Komponenten interoperiert.
Fügen Sie am Anfang der Datei den folgenden Standardheader ein:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
Weitere Informationen über Elemente von Manifesten und deren Attribute erhalten Sie, indem Sie in der MSDN Library nach "Application Manifests Reference" suchen.
Bestimmen Sie den Besitzer des Manifests. Im folgenden Beispiel ist myComApp, Version 1, Besitzer der Manifestdatei.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" />
Bestimmen Sie die abhängigen Assemblys. Im folgenden Beispiel ist myComApp von myManagedComp abhängig.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="8275b28176rcbbef" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="myOrganization.myDivision.myManagedComp" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="8275b28176rcbbef" language="*" /> </dependentAssembly> </dependency> </assembly>
Speichern und benennen Sie die Manifestdatei. Der Name eines Anwendungsmanifests besteht aus dem Namen der ausführbaren Assembly gefolgt von der Erweiterung MANIFEST. Der Dateiname des Anwendungsmanifests für myComApp.exe lautet z. B. myComApp.exe.manifest.
Sie können ein Anwendungsmanifest im gleichen Verzeichnis wie die COM-Anwendung installieren. Sie können es aber auch der EXE-Datei der Anwendung als eine Ressource hinzufügen. Weitere Informationen erhalten Sie, indem Sie in der MSDN Library nach "Side-by-side Assemblies" suchen.
So erstellen Sie ein Komponentenmanifest
Erstellen Sie mit einem XML-Editor ein Komponentenmanifest, um die verwaltete Assembly zu beschreiben.
Fügen Sie am Anfang der Datei den folgenden Standardheader ein:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
Bestimmen Sie den Besitzer der Datei. Das <assemblyIdentity>-Element des <dependentAssembly>-Elements in der Anwendungsmanifestdatei muss mit dem entsprechenden Element im Komponentenmanifest übereinstimmen. Im folgenden Beispiel ist myManagedComp, Version 1.2.3.4, Besitzer der Manifestdatei.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" /> publicKeyToken="8275b28176rcbbef"
Bestimmen Sie alle Klassen in der Assembly. Verwenden Sie das <clrClass>-Element, um die einzelnen Klassen in der verwalteten Assembly eindeutig zu kennzeichnen. Das Element, das ein Unterelement des <assembly>-Elements ist, verfügt über die in der folgenden Tabelle beschriebenen Attribute.
Attribut
Beschreibung
Erforderlich
clsid
Der Bezeichner, der die zu aktivierende Klasse kennzeichnet.
Ja
description
Eine Zeichenfolge, die Benutzer über die Komponente informiert. Der Standardwert ist eine leere Zeichenfolge.
Nein
name
Eine Zeichenfolge, die die verwaltete Klasse darstellt.
Ja
progid
Der Bezeichner für die spät gebundene Aktivierung.
Nein
threadingModel
Das COM-Threadingmodell. "Both" ist der Standardwert.
Nein
runtimeVersion
Dieses Attribut wird ignoriert. Wenn die Common Language Runtime nicht bereits geladen wurde, wird die aktuellste Version geladen, bevor die Klasse aktiviert wird. Andernfalls wird die derzeitig geladene Version verwendet.
Nein
tlbid
Der Bezeichner der Typbibliothek mit den Typeninformationen über die Klasse.
Nein
Bei allen Attributtags muss die Groß- und Kleinschreibung beachtet werden. Sie können CLSIDs, ProgIDs, Threadingmodelle und die Version der Common Language Runtime ermitteln, indem Sie die exportierte Typbibliothek der Assembly mit dem OLE/COM-Objektkatalog (Oleview.exe) anzeigen.
Das folgende Komponentenmanifest kennzeichnet eine einzelne Klasse mit zwei Methoden.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" /> publicKeyToken="8275b28176rcbbef" <clrClass clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}" progid="myManagedComp.testClass1" threadingModel="Both" name="myManagedComp.testClass1" runtimeVersion="v1.0.3705"> </clrClass> <clrClass clsid="{367221D6-3559-3328-ABD3-45B6825F9732}" progid="myManagedComp.testClass2" threadingModel="Both" name="myManagedComp.testClass2" runtimeVersion="v1.0.3705"> </clrClass> <file name="MyManagedComp.dll"> </file> </assembly>
Speichern und benennen Sie die Manifestdatei. Der Name eines Komponentenmanifests besteht aus dem Namen der Assemblybibliothek gefolgt von der Erweiterung MANIFEST. Das Manifest zu myManagedComp.dll lautet z. B. myManagedComp.manifest.
Sie müssen das Komponentenmanifest als eine Ressource in die Assembly einbetten.
So betten Sie ein Komponentenmanifest in eine verwaltete Assembly ein
Erstellen Sie ein Ressourcenskript, das die folgende Anweisung enthält:
RT_MANIFEST 1 myManagedComp.manifest
In dieser Anweisung ist myManagedComp.manifest der Name des einzubettenden Komponentenmanifests. Der Name der Skriptdatei für dieses Beispiel lautet myresource.rc.
Kompilieren Sie das Skript mit dem Ressourcencompiler von Microsoft Windows (Rc.exe). Geben Sie an der Eingabeaufforderung folgenden Befehl ein:
rc myresource.rc
Rc.exe erstellt die Ressourcendatei myresource.res.
Kompilieren Sie die Quelldatei der Assembly erneut, und geben Sie die Ressourcendatei mit der Option /win32res an:
/win32res:myresource.res
Auch hier ist myresource.res der Name der Ressourcendatei mit der eingebetteten Ressource.
Siehe auch
Konzepte
Anforderungen an COM-Interop ohne Registrierung
Konfigurieren von COM-Komponenten für eine Aktivierung ohne Registrierung