Laden...

Können Libraries beim Erstellen einer Solution eingebunden werden?

Erstellt von GeneVorph vor 3 Jahren Letzter Beitrag vor 3 Jahren 363 Views
G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 3 Jahren
Können Libraries beim Erstellen einer Solution eingebunden werden?

Hallo,

ich habe eine Windows-Forms-App mit mehreren AForge-Libararies erstellt und möchte diese nun zu einer .exe kompilieren. Das klappt auch problemlos, allerdings erhielt ich beim Start die Fehlermeldung:

Fehlermeldung:
Microsoft .NET Framework
Unbehandelte Ausnahme in Anwendung. Klicken Sie auf "Weiter" um den Fehler zu ignorieren und die Anwendung fortzusetzen. Wenn Sie auf "Beenden" klicken, wird die Anwendung sofort beendet.
Die Datei oder Assembly "AForge Video.DirectShow Version=2.2.5.0.Culture=neutral PublicKey Token=61ea4348d43881b7" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Was ich dazu per Google gefunden habe war folgendes: offensichtlich müssen die Assembly-Dateien im selben Ordner abgelegt werden, wie die .exe auch.
Das habe ich nun getan und damit läuft die App auch.

Meine Frage ist folgende: gibt es eine Möglichkeit, diese Dateien in die .exe mit einzubinden?

Es sind nämlich insgesamt 19 Dateien und ich kann sie auch nicht einfach in einen Sub-Folder der Anwendung unterbringen - das führt dann nur wieder zu selben Fehlermeldung.
Was ich sonst dazu gefunden habe ist, dass man die Dateien ins .exe-Verzeichnis kopieren muss, oder eine Setup-Datei schreiben, die die Assembly aus einem zip-Ordner extrahiert oder ähnliches. Wie gesagt: gibt es keine Möglichkeiten die in der .exe unterzubringen?

Vielen Dank,
Gruß
vorph

16.834 Beiträge seit 2008
vor 3 Jahren

Hi,

nur weil man alles in eine Exe packen kann heisst das nicht, dass man das tun sollte oder darf.
Gerade bei LGPL lizenzierten Bibliotheken wie AForge kann das ein Problem sein, weil die LGPL Lizenz besagt, dass die jeweilg lizenzierte Bibliothek im Endprodukt austauschbar sein muss, was bei einem ILMerge nicht mehr möglich ist.

Ich bin kein Anwalt, aber nach meinem Verständnis begehst Du damit ein Lizenzvergehen.
Statisches Linken ist einfach nicht erlaubt.

offensichtlich müssen die Assembly-Dateien im selben Ordner abgelegt werden, wie die .exe auch.

Ja, das ist seit ca. 20 Jahren das Standardverhalten von .NET 🙂

Meine Frage ist folgende: gibt es eine Möglichkeit, diese Dateien in die .exe mit einzubinden?

Die prinzipielle Möglichkeit gibt es immer, so funktioniert .NET.
Neben der lizenztechnischen Erlaubnis, die Du hier offenbar nicht hast, kannst Du natürlich das DLL-Laden so umsetzen, dass das nur über eine DLL funktioniert und dadurch ILmerge nicht verwendet werden kann.

Aber eigentlich erübrigt sich die Frage, weil Du es schlicht und einfach wohl nicht darfst, solang Du LGPL lizenzierte Abhängigkeiten verwendest bzw. Abhängigkeiten, die entsprechendes untersagen. Wenn es erlaubt ist, kannst Du für .NET Framework dotnet/ILMerge verwenden bzw. für .NET Core / ab .NET 5 Single file application - .NET

Warum AForge noch LGPL verwendet weiß ich nicht; LGPL sollte nicht unbedingt mehr verwendet werden, weil es moderne Anforderungen an eine Abhängigkeit nicht mehr wirklich abdeckt bzw. unmöglich macht.

4.939 Beiträge seit 2008
vor 3 Jahren

Du kannst die Assemblies doch in einem Unterordner des Applikationsverzeichnisses unterbringen, dazu mußt du den Ordner nur in der app.config bekannt machen, s. z.B. Loading .NET Assemblies out of Seperate Folders (Stichwort: privatePath).

G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 3 Jahren

Ich bin kein Anwalt, aber nach meinem Verständnis begehst Du damit ein Lizenzvergehen.

Yieks - das sei mir fern 🙂 !

Danke für die ausführlichen Erläuterungen, Abt; und wieder ein bisschen schlauer 😉

Statisches Linken ist einfach nicht erlaubt.

Na ja, so gesehen...passt auch irgendwie nicht zum dem d in dll, oder?

[...]dazu mußt du den Ordner nur in der app.config bekannt machen, s. z.B. Loading .NET Assemblies out of Seperate Folders (Stichwort: privatePath).

Genau so habe ich es jetzt auch gemacht. Vielen Dank.

Gut, dann ist meine Frage somit beantwortet. Vielleicht noch ergänzend der ausdrückliche Hinweis, dass ich mir über die lizenzrechtlichen Bestimmungen diesbezüglich nicht bewusst gewesen bin - nicht, dass meine Frage hier als Hilfe zum Brechen von Lizenzrecht missverstanden wird 😉

viele Grüße
Vorph