2011-09-13 14 views
9

Ho 4 DLL. Ma voglio avere 1 sola dll che conterrà il codice di tutte e 4 queste dll. Ho provato ad aggiungere un progetto e a incollare tutto il mio codice esistente in un progetto, ma non ho potuto.Come combinare 2 o più gruppi C# in 1 libreria?

+0

aggiungerli come un risorse, utilizzare Solution Explorer, aprire le proprietà del progetto e aggiungere assiemi requred come risorse binarie –

+0

Stavo creando una libreria di classi (finestre di dialogo comuni). Ma ho trovato alcune di esse, ma anche quelle sono in un progetto di libreria di classe. Le ho aggiunte come progetto esistente al mio PROGETTO (libreria di classi). E quando costruisco e voglio li uso devo aggiungere ognuno ai riferimenti – Javidan

+0

Aggiungere referenti a queste DLL da proiettare, ma nella sezione Refenced assembly del progetto, puntarle sopra e scegliere in Property Editor per gli assembly referenziati "Copy Local: False, Embed Types: False", quindi caricate semplicemente em, come al solito, dalla risorsa incorporata nella sezione Applicazione appena prima della chiamata al metodo Application.Run(), dove questi assembly fanno riferimento all'assembly principale. In ogni caso, è possibile fare riferimento agli assembly nel progetto in fase di progettazione e non copiarli tutti in cartella di output dell'assieme, invece, memorizza come risorsa in un carico di un assembly quando questo assembly di archiviazione fa riferimento a –

risposta

11

Date un'occhiata in ILMerge

ILMerge è un'utility per la fusione più assembly .NET in un assembly .NET singolo .

+0

come usare vero? – Javidan

+0

@Javidan Perché non vuoi semplicemente incorporare le tue DLL come risorse in una dll? Non sarà necessario toccare gli assembly, poiché potrebbero essere firmati e richiedere di abbandonare l'assembly risultante dopo l'unione a livello IL. –

+0

Non so cosa fare. Ho installato ilmerge, ma non posso usarlo. E non so quale sia il metodo comodo e sicuro da combinare. – Javidan

6

È possibile utilizzare ILMerge utilità

Oppure si può embed the dlls you want to merge as resources

Ecco il codice di esempio:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { 
    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    { 
     Byte[] assemblyData = new Byte[stream.Length]; 
     stream.Read(assemblyData, 0, assemblyData.Length); 
     return Assembly.Load(assemblyData); 
    } 
}; 
+0

Link in un post. –

+0

Ho sempre avuto un sacco di problemi nel tentativo di caricare DLL incorporate ... è passato un po 'di tempo, ma IIRC il problema che stavo facendo era, anche con 'Load (byte [])' l'assembly è stato tentato di essere caricato dal disco. –

+0

@pst Non c'è alcun problema con il caricamento degli assiemi, poiché è possibile caricarlo nel proprio dominio dell'applicazione e controllare manualmente l'accesso e il controllo delle versioni su di esso. E sì, gli assembly caricati nel dominio dell'applicazione, non possono essere ricaricati dal disco o riscritti da un altro assembly, essendo già caricati in memoria. È di design. –

Problemi correlati