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.
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?
Sie haben mehrere Möglichkeiten:
OR
OR
AssemblyResolve
-Handler einrichten, der zur Laufzeit liest from Resources und gibt die benötigten DLLs an die .NET-Laufzeit zurück ...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
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:
- Jeffrey Richters Vorschlag von Verwendung eingebetteter Ressourcen als Methode zum Zusammenführen von Assemblys
- Einar Egilssons Vorschlag mit cecil Modulinitialisierer erstellen
Das Ergebnis ist eine supereinfache Lösung, bei der lediglich Costura.Fody von NuGet abgerufen werden muss.
Eigenschaften:
Versuchen Sie ILMerge-GUI, die .NET-Fusion . Es ist eine GUI-basierte Ilmerge
, die alle Kommandozeilen-Arbeit vermeidet.
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.
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: