2011-11-10 15 views
70

Sto consumando il mio stack di servizio utilizzando il progetto EXE (attività di avvio per l'applicazione blu) in cui ho copiato la DLL dello stack di servizio seguente & alcune DLL di Azure nel progetto EXE.Come unire più assiemi in uno?

dlls

Quando costruisco questo progetto EXE poi DLL Azure saranno in bundle con il mio EXE ma DLL il servizio stack non sarà in bundle con EXE, a causa di eseguire il mio EXE su qualsiasi macchina ho bisogno di copiare tutti i servizi stack di DLL manualmente.

Ho usato dll questo servizio di pila da usare

JsonServiceClient client = new JsonServiceClient(servicepath); 

Cosa devo fare per bundle tutte queste DLL al mio EXE?

risposta

95

Sono disponibili diverse opzioni:

O

  • uso qualche strumento come SmartAssembly (commerciale)
    può incorporare e unire tra le altre cose (non c'è bisogno di modificare il codice sorgente)

O

  • code that yourself in less than 10 lines (cambio codice sorgente gratuito ma minimo)
    contrassegnare tutte le dipendenze necessarie come "risorsa incorporata" e" - in questo modo essi sono inclusi nel file EXE ... è necessario impostare un AssemblyResolve gestore, che in fase di esecuzione legge da risorse e restituisce le DLL necessari per il runtime .NET ...
+3

Grazie per avermi ricordato della soluzione di incorporamento di Jeffrey Richter! Vedi la mia risposta citando [Costura] (https://github.com/Fody/Costura/) per uno strumento che combina questo con l'iniezione del codice necessario. – CodeFox

26

Lo strumento che stai cercando si chiama ILMerge. Si tratta di uno strumento a riga di comando e può essere utilizzato in questo modo:

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

C'è anche un articolo che descrive come includere ILMerge nell'installazione progetto VS here

+0

Ciao, posso aggiungere risorsa esterna (file/immagine) in eseguibile? –

6

Prova ILMerge-GUI, the .NET merger. Si tratta di una GUI basata Ilmerge che evita il funzionamento di tutte le linee di comando.

+2

Fantastico! Ha funzionato alla grande per me! –

+1

Codeplex si sta spegnendo, quindi ecco il link del progetto spostato: https://bitbucket.org/wvd-vegt/ilmergegui – Hegi

2

Verificare il progetto ServiceStack.Gap che mostra alcuni esempi di come ILMerge ServiceStack in una singola piattaforma multiplo .exe.

ServiceStack comprende anche una serie di altre caratteristiche che è particolarmente adatto per queste applicazioni che creano incorporato dove:

  • permette ai servizi di essere self-hosted utilizzando.NET HTTP Listener
  • Supporta Razor precompilato Visto
  • Risorse PHP supporta
  • Supporta un database incorporato in SQLite e OrmLite
  • Può essere ILMerged in un unico exe
19

Un ottimo strumento per include assembly referenziati come risorse incorporate è Costura (un componente aggiuntivo Fody). L'autore Simon Kropp descrive come segue:

[...] una combinazione dei due metodi:

Il risultato è una soluzione super semplice che richiede semplicemente di recuperare Costura.Fody da NuGet.

Caratteristiche:

  • compresi i simboli di debug
  • con/senza assemblaggi specifici
  • compressione delle assemblee incorporati
  • Altri (vedi Readme)
+7

OMG Costura.Fody è la risposta giusta. Installato il pacchetto da nuget, ho ricostruito il progetto e ora ho un ESCLUSIVO indipendente di EXE !! –

+3

Non riesco a credere quanto sia facile. Basta installare i pacchetti da nuget e il gioco è fatto. – iraSenthil

+1

Sto usando anche Costura.Fody. È banale da configurare e facilmente facile includere i pacchetti NuGet come risorse. Ottieni un progetto. –

2

Se si dispone di WPF dipendenze tua le opzioni potrebbero essere più limitate ..... ILMerge non sembra gestirle. Costura.Fody (come menzionato sopra Codefox) ha funzionato perfettamente per noi e ci sono voluti circa 5 minuti per andare ... un'esperienza molto buona.

Installare con Nuget (selezionando il progetto predefinito corretto nella console di Gestione pacchetti).

Unisce tutte le DLL contrassegnate "Copia locale" = vero e produce un .EXE unito (insieme all'output standard, la maggior parte delle quali non è ora necessario) che è anche compresso. Questo può quindi essere usato standalone.

La licenza è MIT in quanto è possibile modificare/distribuire secondo necessità.

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

Problemi correlati