Laden...

Wie kann ich Interop Typen, die in einer DLL liegen, einbetten

Erstellt von c#nup vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.461 Views
C
c#nup Themenstarter:in
19 Beiträge seit 2017
vor 5 Jahren
Wie kann ich Interop Typen, die in einer DLL liegen, einbetten

Hallo Comunity,

ich habe 2 dll's. Lib.dll enthält einige Klassen, Product.dll ist eine COM-Komponente die von einer Drittsoftware genutzt wird. Zur Laufzeit arbeitet die Product.dll mit Objekten von Klassen die in der Lib.dll definiert sind. Ich habe vollen Zugang zu beiden Entwicklungsprojekten in Visual Studio, würde aber in der Product.dll ungerne Code schreiben.

Wenn ich deploye, muss ich die Lib.dll ins Verzeichniss der Drittsoftware (die die Product.dll aufruft) legen, anderenfalls wird die Lib.dll nicht gefunden und es kommt zum Absturz. Das geht zur Entwicklungszeit, jedoch nicht im Produktiveinsatz. Was auch nicht geht, ist die Klassen, die in der Lib.dll sind in die Product.dll zu copypasten.

Im VS Projekt der Product.dll ist die Lib.dll als Verweis eingebunden. In den Eigenschaften dieses Verweises gibt es die Option "Interoptypen einbetten" mit der Erklärung "Gibt an, ob in der Assembly definierte Typen in die Zielassembly eingebttet werden". Nach meinem Verständniss würde die Lib.dll mit dieser Option in die Product.dll integriert und ich bräuchte die Lib.dll nicht separat zu Deployen - das ist mein Ziel.

Wenn ich die "Interoptypen einbetten"-Option aktiviere und das Projekt erstelle, dann kommt es zum > Fehlermeldung:

Fehler BC31553: "Aus Assembly "Lib.dll" können keine Interoptypen eingebettet werden, da entweder das System.Runtime.InteropServices.ImportedFromTypeLibAttribute-Attribut oder das System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute-Attribut fehlt." Ab hier stehe ich auf dem Schlauch. Trotz googlen ist mir nicht klar wo und wie ich diese Attribute setzen soll.

Also im Kern geht es mir darum beim erstellen der Product.dll die Lib.dll so einzubinden/einzubetten, dass die Lib.dll Inhalte in der Product.dll enthalten sind, ohne dass ich die Lib.dll mitschleppen muss.

Ich bitte um Rat.

W
872 Beiträge seit 2005
vor 5 Jahren

Wenn es sich bei den beiden dlls um Assemblies handelt, dann könntest Du die mit ILMerge zusammenfassen.
Wenn die DLLs nativer Code sind, dann wüßte ich nicht, wie Du die Dlls statisch zusammenfügen kannst.

C
c#nup Themenstarter:in
19 Beiträge seit 2017
vor 5 Jahren

Danke für die Antwort weismat. Mittlerweile bin ich auf MSBuild.ILMerge.Task gestoßen. Es ist ein Nuget-Packet, das einen ILMerge Task ins Projekt integriert um alle dll's zu mergen. Tolle Sache!