2011-01-08 15 views
6

Ho una DLL che memorizza le classi comuni a due applicazioni. Mi piacerebbe mantenere la mia applicazione limitata a un file EXE e vorrei vedere se posso in qualche modo incorporare questa DLL nel mio EXE principale.È possibile unire una DLL in un EXE .NET?

Come posso incorporare la DLL esterna nella mia applicazione? (Se possibile)

+1

Modificato il titolo come iniezione DLL è un termine sovraccarico. –

risposta

9

Un'alternativa a ILMerge consiste nell'incorporare assiemi dipendenti nell'eseguibile come risorse incorporate e sfruttare il meccanismo assembly resolve per caricarli come flussi di risorse. Un esempio di come fare questo può essere trovato qui:

http://blog.magenic.com/blogs/brante/archive/2008/04/14/Embedded-Assembly-Linker.aspx

Io uso questo schema me stesso che funziona bene. ILMerge a volte ha problemi, quindi la tua milizia potrebbe variare.

+0

perché mai dovremmo farlo usando ILMerge? –

+1

@Pauli Come accennato, ILMerge presenta problemi con alcuni scenari, ad es. si scontra con alcuni tipi di confusione (abbiamo raggruppamenti confusi), ha problemi con le risorse Xaml di WPF, ha difficoltà a unire più assiemi WPF mentre il compilatore Xaml inserisce un tipo di supporto in ogni assembly con lo stesso nome nello stesso spazio dei nomi che causa ILMerge a vomitare su tipi duplicati. Questi sono solo quelli che ho personalmente di fronte. –

+0

è vero che avere dei tipi con lo stesso nome completo (namespace + typename) dà problemi ... non sapevo che fosse permesso caricare diversi assembly contenenti tipi con lo stesso nome completo in un AppDomain come questo? è comunque un bel trucco, che consente di avere gli assembly memorizzati in un database o scaricati su Internet. –

1

Eazfuscator.NET è uno strumento meraviglioso che consente anche l'unione e l'incorporamento di dll, oltre alle normali funzioni di offuscamento. Ottimizza anche il codice offuscato. Invece di fare scherzi con ilmerge devi solo aggiungere un'annotazione di classe e eazfuscator farà tutto per te. È meraviglioso!

[assembly: System.Reflection.Obfuscation(Feature = "encrypt symbol names with password PAS$", Exclude = false)] 
[assembly: System.Reflection.Obfuscation(Feature = "embed nLog.dll", Exclude = false)] 
public class MyClass { 
    //blah 
} 
+1

dove si trova l'uscita dell'Eazfuscator? – Vikneshwar

+1

Eazfuscator, quando integrato con Visual Studio, funziona solo sul posto sull'output del compilatore. Quindi qualunque cosa sia nella cartella bin/Release. Puoi anche copiarlo manualmente con msbuild se vuoi fare qualcosa di personalizzabile. – scaryman

+0

@scaryman Puoi rivelare presenza/assenza di affiliazione quando usi 'meraviglioso' per favore? (Non dicendo che sia tutto tranne quello - l'assenza di una tale affiliazione lo farebbe salire a mio avviso * come sarebbe la divulgazione *) –

Problemi correlati