Signierte Assembly Abhängigkeit, die eine COM-DLL verweist muss die Abhängigkeit der erzeugt haben Interopassembly verwiesen

StackOverflow https://stackoverflow.com/questions/1843529

Frage

Es tut uns Leid über die schreckliche Titel.

Ich habe eine signierte Assembly 'Signed.dll', die eine Abhängigkeit von einer anderen Baugruppe, sagt Executable.exe.

Signed.dll verweist auf eine COM-DLL und macht öffentlich eine der dies COM DLL-Typen: 'ComPublicT'

Executable.exe muss den automatisch generierte Interop.COM.dll aus dem signierten Projekt verweisen, anstatt einen Verweis auf den ursprünglichen COM-DLL hinzuzufügen.

Der Fehler ist eine Typübereinstimmung zwischen zwei verschiedenen Typen von ComPublicT den beiden verschiedenen COM Interopassemblys.

Dies ist nur erforderlich, wenn Signed.dll signiert ist.

Anders als eine Art zu schaffen, die imitiert ComPublicT, wie kann ich Executable erlauben, den COM-DLL zu verweisen, anstatt die COM-Interop-Assembly der Unterzeichnung?

Warum geschieht das?

Bearbeiten Hier ist eine etwas andere Aufteilung:

Signed Projektreferenzen COM.dll, und macht öffentlich einen Typ aus dem COM.dll Das Hinzufügen dieser Referenz in Visual Studio erstellt automatisch Interop.COM.dll

Ausführbare Referenzen und hängt von der Unterzeichnung Projekt Normalerweise können Sie einen Verweis auf COM.dll hinzufügen und alles ist gut.

Da Signed signiert ist, die öffentlich ausgesetzt Interop.COM.dll Typ von der Unterzeichnung wird vom Compiler nicht als die selben wie die öffentlich ausgesetzten Art von Executable Interop.COM.dll

gesehen

Executable manuell die Unterzeichnung Referenz muss Interop.COM.dll, die zerbrechlich anfühlt.

War es hilfreich?

Lösung

  1. Jede Baugruppe durch eine signierte Assembly verwiesen wird, muß auch unterzeichnet werden.

  2. Normalerweise gibt es eine signierte Primary Interop Assembly (PIA) durch den Autor des COM-DLL zur Verfügung gestellt. Es sollte die einzige Interopassembly für ihre Mutter COM-Typen von einer .NET-Assembly referenziert werden. http://msdn.microsoft.com/en-us/library/aax7sdch. aspx Es gibt kein PIA in meinem Fall.

Die beiden Interopassemblys von Visual Studio für meine beiden Projekte erzeugt unterscheiden, dass eine Interop-Assembly signiert ist, und das andere ist nicht signiert.

So werden die Typen in dem dem Interopassemblys enthaltenen abweichen.

Eine Lösung ist eine einzige signierte Interop-Assembly zu generieren, die von beiden Projekten verwiesen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top