Erstellen von DLLs für side-by-side Assemblys

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

  • Ihre DLLs sollten so konzipiert werden, dass mehrere Versionen gleichzeitig und im gleichen Prozess ausgeführt werden können, ohne sich gegenseitig zu beeinträchtigen. Viele Anwendungen hosten beispielsweise mehrere Plug-Ins, die jeweils eine andere Version einer Komponente erfordern. Der Entwickler der side-by-side 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 beabsichtigen, Ihre Komponente als freigegebene Komponente auf Systemen bereitzustellen, die älter als Windows XP sind, müssen Sie die Komponente weiterhin auf diesen Systemen als einzelne Instanz 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. Bestimmen Sie, ob verschiedene Versionen der Assembly separate Datenstrukturen erfordern, z. B. Speicherzuordnungsdateien, benannte Rohre, 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 in allen Versionen verwendet werden können, und welche Datenstrukturen für eine Version privat sein müssen. Bestimmen Sie, ob freigegebene Datenstrukturen separate Synchronisierungsobjekte erfordern, z. B. Semaphoren und Mutexes.

  • Einige Objekte, z. B. Fensterklassen und Atoms, werden für jeden Prozess eindeutig benannt. Objekte wie Fensterklassen sollten für jede Assembly mithilfe des Manifests versioniert werden. Verwenden Sie für Objekte wie Atoms versionsspezifische Bezeichner, es sei denn, Sie planen, alle Versionen freizugeben. Wenn Sie versionsspezifische Bezeichner verwenden, verwenden Sie die vierteilige Versionsverwaltungsnummer.

  • Fügen Sie keinen Selbstregistrierungscode in jede 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 geändert werden. Wenn Sie eine neue Version Ihrer Assembly freigeben, müssen Sie diese #define Anweisung nur ändern. Beispiel:

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Store alle nichtpersistenten Daten im Temp-Verzeichnis.

  • Fügen Sie keine Benutzerdaten an globale Speicherorte ein. Trennen Sie Anwendungsdaten von Benutzerdaten.

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

  • Weisen Sie alle Nachrichten und Datenstrukturen zu, die über Prozesse hinweg verwendet werden, um eine unbeabsichtigte prozessübergreifende Freigabe zu verhindern.

  • Ihre DLL sollte nicht von der Freigabe über Versionen abhängig sein, die möglicherweise nicht vorhanden sind, z. B. freigegebene Speicherabschnitte, die nicht in verschiedenen Versionen Ihrer Assembly freigegeben werden.

  • Wenn Sie neue Funktionen hinzufügen, die nicht dem Binären Schnittstellenkompatibilitätsvertrag der ursprünglichen DLL folgen, müssen Sie eine neue CLSID, ProgId und Dateinamen zuweisen. Zukünftige Versionen Ihrer parallelen Assembly sind dann erforderlich, um diese CLSID, ProgId und dateinamen zu verwenden. Dadurch wird ein Konflikt verhindert, wenn eine Version der DLL, die nicht nebeneinander 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 und Festlegen der Standardeinstellungen für die Assembly im Assemblycode. Speichern Sie die Standardeinstellungen nicht in der Registrierung.

  • Weisen Sie allen Datenstrukturen Versionen zu.

  • Ihre DLL sollte den Zustand der nebeneinander stehenden Assembly speichern, wie in der Erstellungsstatus-Storage für Side-by-Side-Assemblys beschrieben.