Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Wie kann ich Interop Typen, die in einer DLL liegen, einbetten
c#nup
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

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

beantworten | zitieren | melden

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
Fehler
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.
private Nachricht | Beiträge des Benutzers
weismat
myCSharp.de - Member



Dabei seit:
Beiträge: 872
Herkunft: Frankfurt am Main

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
c#nup
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers