mayho33
Goto Top

DLL in C-Sharp Assembly einbetten

Hallo @ All!

Ich versuche via Visual Studio 2013 Professional eine C# Dll (Dot.Net 4 und derzeit noch leer) in ein C#- Forms Assembly über "Verweise" einzubetten (ebenfalls Dot.Net 4 und auch noch leer). Ich möchte nicht den Weg über "Embedded Resources" gehen so wie es z.B. hier (https://www.youtube.com/watch?v=x-KK7bmo1AM) beschrieben wird, weil die DLL auch noch in Entwickluung ist. So muss ich nicht jedesmal die DLL kopieren und es können beide Projekte parallel entwickelt und geprüft werden.

Ich scheitere aber immer an so einer bescheuerten Meldung von Visual Studio (verstehe sie nicht):

Interoptypen aus Assembly "meine.dll' können nicht eingebettet werden, da entweder das 'ImportedFromTypeLibAttribute'-Attribut oder das PrimaryInteropAssemblyAttribute-Attribut fehlt. (Hä??)


Zum Einbetten, also in die Exe streamen beim Build gebe ich in den Eigenschaften der DLL im Ziel-Assembly an: Interopt-Typen einbetten. Das sollte laut MS reichen, wenn ich das richtig verstanden habe.

Warum will ich das machen, man könnte ja einfach die DLL neben der EXE liegen lassen und gut ist's? Ja könnte man, ich möchte es aber so machen.

Hat jenand einen Tipp für mich was ich da genau machen muss?

Vielen Dank für die Hilfe!

Mayho

Content-Key: 276299

Url: https://administrator.de/contentid/276299

Printed on: April 16, 2024 at 17:04 o'clock

Mitglied: 114757
114757 Jul 03, 2015 updated at 13:36:57 (UTC)
Goto Top
Moin,
das läuft so nur über Interfaces, du benötigst zusätzlich zur deiner DLL ein entsprechendes Interface mit dem ImportedFromTypeLib Attribut.
Siehe: Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten Assemblys (C# und Visual Basic)
Hierbei liegen die DLLs trotzdem noch extern. Eine Möglichkeit ohne Ressource ist mir so nicht bekannt.

Gruß jodel32
Member: mayho33
mayho33 Jul 07, 2015 updated at 11:04:30 (UTC)
Goto Top
Hallo Jodel!

Danke für das Beispiel, aber die DLL als Verweis neben der Exe hat bisher auch immer funktioniert. Das ist nicht das Problem. Meine Exe ist portable und sollte wenn möglich alle notwendigen Bibliotheken "intern" haben (Single-Exe) damit nichts vergessen werden kann oder verloren geht.

Mein Problem ist einfach dass, MS einen Weg beschreibt wie eine DLL über Visual Studio (2013) in die Exe kompiliert werden kann, der anscheinend nicht funktioniert.

Ich muss wohl doch den Weg über ILMerge gehen oder diesen: http://stackoverflow.com/questions/189549/embedding-dlls-in-a-compiled- ...


EDIT (20 Mins später....)

@jodel: Glaube ich habe das nun verstanden. Probiere das später noch aus.

Danke!
Member: mayho33
mayho33 Jul 08, 2015 at 08:40:19 (UTC)
Goto Top
Noch eine Frage zur Schnittstelle:

Habe verstanden, dass eine Schnittstelle da sein muss damit eine DLL in ein Assembly eingebunden werden kann. Aber was muss/Kann in der Schnittstelle vorhanden sein? Kannst du mir das noch erklären @jodel? oder irgend jemand anderer?

Danke!
Mitglied: 114757
114757 Jul 08, 2015 updated at 08:59:05 (UTC)
Goto Top
Zitat von @mayho33:

Noch eine Frage zur Schnittstelle:

Habe verstanden, dass eine Schnittstelle da sein muss damit eine DLL in ein Assembly eingebunden werden kann. Aber was muss/Kann
in der Schnittstelle vorhanden sein? Kannst du mir das noch erklären @jodel? oder irgend jemand anderer?

Siehst du doch in der verlinkten Anleitung... Im Interface stehen immer die Definitionen der Funktionen, also nur der Körper ohne Funktionsinhalt, wie bei den Header-Dateien eines C Programms.
Aber wie bereits geschrieben, die DLL damit "einbetten" wirst du mit diesem Verfahren auch nicht erreichen.
Member: mayho33
mayho33 Jul 08, 2015 at 10:27:07 (UTC)
Goto Top
Hmmm! OK! Dachte das wäre irgendeine spezielle Schnittstelle. Wenn es eh das althergebrachte Interface ist, das hatte ich in meiner DLL sowieso drinnen.

Habe den Artikel wieder gefunden: https://msdn.microsoft.com/de-de/library/ff182188.aspx

Leider wie immer bei MS viele Worte aber nur halbe Infos. Kenne mich nicht aus was die wollen. Hast du einen Tipp?

Danke!
Mitglied: 114757
Solution 114757 Jul 08, 2015, updated at Jul 15, 2015 at 07:26:09 (UTC)
Goto Top
Hast du einen Tipp?
Hmm habe das Beispiel aus meinem Link nachgebaut und funktioniert einwandfrei ...Vermutlich hast du da eine Kleinigkeit vergessen, da übersieht man gerne etwas wenn man nur so drüber fliegt.