wake-up-neo.com

Wie verschmelze ich mehrere Baugruppen zu einer?

Ich habe meinen Service-Stack mithilfe eines EXE-Projekts (Startaufgabe für die Azure-Anwendung) verbraucht, indem ich die folgenden DLL & einige Azure-DLLs in das EXE-Projekt kopiert habe.

dlls

Wenn ich dieses EXE-Projekt erstelle, werden Azure-DLLs mit meiner EXE-Datei gebündelt, aber die DLL wird nicht mit EXE-Datei gebündelt, da ich zum Ausführen meiner EXE-Datei auf einem beliebigen Computer alle Service-Stack-Dateien kopieren muss DLL manuell.

Ich habe die DLL dieses Service-Stacks verwendet

JsonServiceClient client = new JsonServiceClient(servicepath);

Was muss ich tun, um all diese DLLs in meiner EXE zu bündeln?

79
Arun Rana

Sie haben mehrere Möglichkeiten:

OR

  • benutze ein Tool wie SmartAssembly (kommerziell)
    es kann unter anderem eingebettet und zusammengeführt werden (keine Notwendigkeit, Ihren Quellcode zu ändern)

OR

  • Code, den Sie selbst in weniger als 10 Zeilen schreiben (kostenlose, aber minimale Änderung des Quellcodes)
    markieren Sie alle benötigten Abhängigkeiten als "eingebettete Ressource" - so werden sie in die EXE-Datei aufgenommen ... Sie müssen einen AssemblyResolve -Handler einrichten, der zur Laufzeit liest from Resources und gibt die benötigten DLLs an die .NET-Laufzeit zurück ...
113
Yahia

Das gesuchte Tool heißt ILMerge . Es ist ein Befehlszeilenprogramm und kann folgendermaßen verwendet werden:

ilmerge /target:winexe /out:MyApp.exe 
        MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll  ServiceStack.Text.dll

Es gibt auch einen Artikel, der beschreibt, wie Sie ILMerge in Ihr VS-Projekt-Setup einbinden können hier

29
yas4891

Ein großartiges Werkzeug, um referenzierte Assemblys als eingebettete Ressourcen einzuschließen, ist Costura (ein Fody Add-In). Der Autor Simon Kropp beschreibt es wie folgt:

[...] eine Kombination von zwei Methoden:

Das Ergebnis ist eine supereinfache Lösung, bei der lediglich Costura.Fody von NuGet abgerufen werden muss.

Eigenschaften:

  • Einschließlich Debug-Symbole
  • Komprimierung eingebetteter Assemblys
  • Einschließlich/ausschließlich bestimmter Baugruppen
  • Andere (siehe Readme )
22
CodeFox

Versuchen Sie ILMerge-GUI, die .NET-Fusion . Es ist eine GUI-basierte Ilmerge, die alle Kommandozeilen-Arbeit vermeidet.

7
Pritam

Wenn Sie WPF-Abhängigkeiten haben, sind Ihre Optionen möglicherweise eingeschränkter. ILMerge scheint sich nicht mit diesen zu befassen. Costura.Fody (wie oben von Codefox erwähnt) funktionierte jedoch perfekt für uns und brauchte ungefähr 5 Minuten, um loszulegen ... eine sehr gute Erfahrung.

Installation mit Nuget (Auswahl des richtigen Standardprojekts in der Package Manager-Konsole).

Es führt alle mit "Copy Local" = true gekennzeichneten DLLs zusammen und erzeugt eine zusammengeführte EXE-Datei (neben der Standardausgabe, die jetzt zum größten Teil nicht erforderlich ist), die ebenfalls komprimiert wird. Dies kann dann eigenständig verwendet werden.

Die Lizenz ist MIT als so können Sie nach Bedarf ändern/verteilen.

https://github.com/Fody/Costura/

3
rexall

Testen Sie das ServiceStack.Gap - Projekt, das mehrere Beispiele für das Zusammenführen von ILMerge ServiceStack in eine einzige plattformübergreifende .exe zeigt.

ServiceStack enthält auch eine Reihe anderer Funktionen, die sich besonders für die Erstellung eingebetteter Apps eignen:

  • Ermöglicht das Selbsthosting Ihrer Dienste mithilfe des HTTP-Listeners von .NET
  • Unterstützt vorkompilierte Razor Views
  • Unterstützt eingebettete Ressourcen
  • Unterstützt eine eingebettete Datenbank in Sqlite und OrmLite
  • Kann in eine einzelne .exe ILMerged werden
2
mythz