Erstellen von DLLs für parallele Assemblys

Befolgen Sie beim Erstellen ihrer eigenen parallelen Assemblys die Richtlinien zum Erstellen von parallelen Assemblys , und erstellen Sie alle DLLs, die in der Assembly verwendet werden, gemäß den folgenden Richtlinien:

  • Ihre DLLs sollten so konzipiert sein, dass mehrere Versionen gleichzeitig und im selben Prozess ausgeführt werden können, ohne sich gegenseitig zu stören. Beispielsweise hosten viele Anwendungen mehrere Plug-Ins, die jeweils eine andere Version einer Komponente erfordern. Der Entwickler der parallelen Assembly muss entwerfen und testen, um sicherzustellen, dass mehrere Versionen der Komponente ordnungsgemäß funktionieren, wenn sie gleichzeitig im selben Prozess ausgeführt werden.

  • Wenn Sie planen, Ihre Komponente als freigegebene Komponente auf Systemen vor Windows XP bereitzustellen, müssen Sie die Komponente auf diesen Systemen weiterhin als single-instance freigegebene Komponente installieren. In diesem Fall müssen Sie sicherstellen, dass Ihre Komponente abwärtskompatibel ist.

  • Bewerten Sie die Verwendung von -Objekten, wenn mehr als eine Version Ihrer Assembly auf dem System ausgeführt wird. Ermitteln Sie, ob verschiedene Versionen der Assembly separate Datenstrukturen erfordern, z. B. speicherbezogene Dateien, Named Pipes, registrierte Windows-Nachrichten und -Klassen, freigegebenen Arbeitsspeicher, Semaphore, Mutexes und Hardwaretreiber. Alle Datenstrukturen, die über Assemblyversionen hinweg verwendet werden, müssen abwärtskompatibel sein. Entscheiden Sie, welche Datenstrukturen versionsübergreifend verwendet werden können und welche Datenstrukturen für eine Version privat sein müssen. Bestimmen Sie, ob freigegebene Datenstrukturen separate Synchronisierungsobjekte wie Semaphore und Mutexe erfordern.

  • Einige Objekte, z. B. Fensterklassen und Atome, sind für jeden Prozess eindeutig benannt. Objekte wie Fensterklassen sollten für jede Assembly mit dem Manifest versioniert werden. Verwenden Sie für Objekte wie Atoms versionsspezifische Bezeichner, es sei denn, Sie planen eine versionsübergreifende Freigabe. Wenn Sie versionsspezifische Bezeichner verwenden, verwenden Sie die vierteilige Versionsnummer.

  • Fügen Sie keinen selbstregistrierten Code in eine DLL ein. Eine DLL in einer parallelen Assembly kann nicht selbst registriert werden.

  • Definieren Sie alle versionsspezifischen Namen in Ihrer DLL mit #define-Anweisungen. Dadurch können alle Registrierungsschlüssel von einem Speicherort aus geändert werden. Wenn Sie eine neue Version Ihrer Assembly freigeben, müssen Sie nur diese #define-Anweisung ändern. Beispiel:

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Speichern Sie alle nichtpersistenten Daten im Temp-Verzeichnis.

  • Speichern Sie keine Benutzerdaten an globalen Speicherorten. Halten Sie Anwendungsdaten von Benutzerdaten getrennt.

  • Weisen Sie allen freigegebenen Dateien eine Dateiversion zu, die vom Namen der Anwendung abhängt.

  • Weisen Sie allen Nachrichten und Datenstrukturen, die prozessübergreifend verwendet werden, eine Version zu, um eine unbeabsichtigte prozessübergreifende Freigabe zu verhindern.

  • Ihre DLL sollte nicht von der Freigabe für Versionen abhängen, die möglicherweise nicht vorhanden sind, z. B. Abschnitte mit freigegebenem Arbeitsspeicher, die nicht für verschiedene Versionen Ihrer Assembly freigegeben werden.

  • Wenn Sie neue Funktionen hinzufügen, die nicht dem Kompatibilitätsvertrag für binäre Schnittstellen der ursprünglichen DLL entsprechen, müssen Sie eine neue CLSID, ProgId und einen neuen Dateinamen zuweisen. Zukünftige Versionen Ihrer parallelen Assembly sind dann erforderlich, um diese CLSID, ProgId und den Dateinamen zu verwenden. Dadurch wird ein Konflikt verhindert, wenn eine Version der DLL, die nicht parallel ist, über eine parallele Version registriert wird.

  • Wenn Sie dieselbe CLSID oder ProgId wiederverwenden, testen Sie, um sicherzustellen, dass die Assembly abwärtskompatibel ist.

  • Initialisieren Sie die Standardeinstellungen für die Assembly im Assemblycode, und legen Sie sie fest. Speichern Sie die Standardeinstellungen nicht in der Registrierung.

  • Weisen Sie allen Datenstrukturen Versionen zu.

  • Ihre DLL sollte den Zustand der parallelen Assembly speichern, wie unter Erstellungszustandsspeicher für parallele Assemblys beschrieben.