2010-02-15 21 views
6

Forse mi manca qualcosa ovvio qui, ma ....NET Assembly Dipendenze

ho costruito un C# progetto di libreria classe generica riutilizzabile dire (A.dll), che fa riferimento a 3 altre assemblee dicono (B.dll, C .dll e D.dll)

Tuttavia, se voglio riutilizzare il mio componente A.dll in un altro progetto, devo comunque includere i riferimenti a B.dll, C.dll e D.dll.

Esiste un modo per configurare A.dll per creare tutte le sue dipendenze nell'A.dll, quindi non è necessario includere gli altri 3 assiemi?

Acclamazioni

+0

C'è poca differenza tra la spedizione di 4 assiemi o 1. E con assiemi separati si mantiene intatta la versione/firma. –

risposta

6

È possibile unire assembly, utilizzando lo strumento ILMerge:

C:\Program Files\Microsoft\ILMerge\ILMerge.exe /target:library /out:abcd.dll a.dll b.dll c.dll d.dll" 

Questo si fonderanno le DLL a, b, c e d in abcd.dll. Unirà anche i simboli di debug ma non la documentazione XML.

Inoltre, è necessario fare riferimento alla DLL stessa nei nuovi progetti e non nei rispettivi progetti. Un'eccezione è se unisci le librerie in un eseguibile, in tal caso puoi fare riferimento alle rispettive librerie/progetti perché saranno caricate con l'eseguibile.

Il Progetto Mono ha anche uno strumento per questo, chiamato mkbundle.

Anche disponibile è ILRepack, che mira a essere compatibile con ILMerge, ma è FLOSS.

+0

Sì, puoi farlo in questo modo. Ma non dovresti (in generale). –

+0

@ Holen Holterman: perché no? – Bobby

+0

Stai rovinando la versione e le informazioni sulla firma. Per un guadagno percepito. –

0

Questo sarebbe qualcosa di simile al collegamento statico di DLL che funziona bene con il C++ nativo. Per quanto ne so, non è possibile collegare staticamente gli assembly nel codice .NET, quindi è necessario includere tutte le DLL.