Einführung

Beim Arbeiten an einem .NET-Projekt, das eine COM-DLL referenziert, ist es entscheidend sicherzustellen, dass Ihr Projekt die richtige Version der Interop-DLL beibehält. Dies ist nicht nur wichtig für die Nachverfolgung der Kompatibilität, sondern auch dafür, dass Ihre Anwendung nahtlos über Updates und Patches hinweg funktioniert. In diesem Blogbeitrag werden wir erkunden, wie man die Versionen der COM-DLL-Referenzen in einer .NET-Umgebung ordnungsgemäß verwaltet und häufige Fallstricke anspricht.

Das vorliegende Problem

Das Problem tritt auf, wenn Sie Visual Studio verwenden, um eine COM-Referenz hinzuzufügen. Standardmäßig kann die zugewiesene Version nicht mit der Version der ursprünglichen COM-DLL übereinstimmen. Diese Diskrepanz kann zu Schwierigkeiten führen, insbesondere wenn Patches beteiligt sind. Möglicherweise fragen Sie sich:

  • Wie kann ich sicherstellen, dass die erzeugte Interop-DLL die richtige Version hat?
  • Gibt es eine Möglichkeit, eine Buildnummer neben Haupt- und Nebenversionsnummern einzufügen?

Lassen Sie uns in die Lösung eintauchen!

Verständnis der COM-Referenzversionen

Bevor wir die Lösung angehen, ist es wichtig zu verstehen, woher die Versionierung stammt:

  1. Typbibliotheken (TypeLibs): In COM ist die Versionierung hauptsächlich mit der Typbibliothek und nicht mit der DLL selbst verbunden. Die GUID bezieht sich auf die TypeLib, und die Versionsnummern entsprechen den Attributen VersionMajor und VersionMinor dieser TypeLib.

  2. Registry-Speicherung: Die Versionsnummern werden in der Windows-Registrierung unter:

    HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
    

    Hier muss die Hauptversion etwas sein, während die Nebenversion auf null gesetzt werden kann, was bedeutet, dass die letzte übereinstimmende Version importiert wird.

Schritte zur Verwaltung Ihrer COM-DLL-Versionierung

1. Die Typbibliothek anstelle der DLL referenzieren

Anstatt die COM-DLL direkt zu referenzieren, sollten Sie die Typbibliothek referenzieren. So erben Sie die damit verbundene Versionierung. Stellen Sie sicher, dass Sie beim Verwenden von TlbImp das Flag /asmversion einfügen, um die gewünschte Version anzugeben.

2. Verwendung von Visual Studio zum Festlegen der Version

Um die Version manuell festzulegen, während Sie Visual Studio verwenden, kann die Bearbeitung der .vcproj-Datei hilfreich sein. Hier ist ein Beispiel, das Ihnen als Leitfaden dient:

<ItemGroup>
    <COMReference Include="MYDLLLib">
        <Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
        <VersionMajor>1</VersionMajor> 
        <VersionMinor>0</VersionMinor> 
        <Lcid>0</Lcid>
        <WrapperTool>tlbimp</WrapperTool>
        <Isolated>False</Isolated>
    </COMReference>
</ItemGroup>

3. Überprüfen der Registrierungseinstellungen

Nach den Änderungen sollten Sie überprüfen, ob die neuen Versionsnummern korrekt in der Registrierungsdatenbank angezeigt werden. Dieser Bestätigungsschritt wird Ihnen Sicherheit geben, dass Ihre Anwendung auch nach Updates weiterhin korrekt funktioniert.

4. Einschränkungen des Unterstützungssystems für Versionsnummern

Leider unterstützt das Versionssystem nur Haupt- und Nebenversionen und berücksichtigt keine Build-Version. Dies wird durch die IDL-Datei bestimmt, die mit Ihrer TypeLib verbunden ist. Wenn Sie detailliertere Versionsinformationen benötigen, sollten Sie in Ihrem Projektmanagementsystem eine Namenskonvention befolgen.

Fazit

Sicherzustellen, dass Ihre Interop-DLL aus einer referenzierten COM-DLL in einem .NET-Projekt die richtige Version beibehält, kann komplex sein. Durch das Befolgen der oben skizzierten Schritte können Sie jedoch einen besser verwaltbaren Ansatz erreichen. Denken Sie daran, dass der Schlüssel darin besteht, sich auf die Version der TypeLib zu konzentrieren, anstatt direkt auf die DLL-Version zu achten, und nach Änderungen die Registrierungseinstellungen zu überprüfen.

Durch die Anwendung dieser Methoden vermeiden Sie nicht nur die Frustration von nicht übereinstimmenden Versionen, sondern optimieren auch Ihre Updates und erhalten die Integrität Ihrer Anwendung durch Patches.

Wenn Sie weitere Fragen oder Einblicke zum Thema COM-DLL-Versionmanagement in .NET-Projekten haben, teilen Sie gerne Ihre Erfahrungen!