2011-09-13 18 views
9

Tengo 4 dlls. Pero quiero tener 1 dll único que contendrá el código de los 4 de estos dlls. Traté de agregar un proyecto y copiar pegar todo mi código existente en un proyecto, pero no pude.¿Cómo combinar 2 o más conjuntos C# en 1 biblioteca?

+0

agregarlos como una recursos, use el Explorador de soluciones, abra las propiedades del proyecto y agregue ensambles requeridos como recursos binarios –

+0

Estaba haciendo la Biblioteca de clases (cuadros de diálogo comunes) .Pero encontré algunos de ellos, pero esos también están en el proyecto de la biblioteca de la clase. Los agregué como proyecto existente a mi PROYECTO (biblioteca de clases) .Y cuando construyo y quiero úselos debo agregar cada uno a las referencias – Javidan

+0

Agregue los refereces a estas DLL para proyectar, pero en la sección Refenced assemblies del proyecto, apúntelos y elija en Property Editor los ensambles a los que hace referencia "Copy Local: False, Embed Types: False", luego simplemente cárguelas como de costumbre, desde el recurso incrustado en la sección Aplicación justo antes de la llamada al método Application.Run(), donde estos ensambles hacen referencia en su ensamblaje principal. De todos modos, puede hacer referencia a ensamblados en el proyecto en tiempo de diseño y no todos copiarlos en En su lugar, la carpeta de salida de ensamblaje se almacena como un recurso en una carga de ensamblaje cuando este ensamblaje de almacenamiento hace referencia a –

Respuesta

11

Tener una mirada en ILMerge

ILMerge es una utilidad para la fusión de varias NET en un ensamblado de .NET sola .

+0

cómo usar eso ? – Javidan

+0

@Javidan ¿Por qué no quieres simplemente embeber tus dlls como recursos en un dll? No necesitará tocar ensamblajes, ya que pueden estar firmados, y es necesario renunciar al ensamblaje resultante después de la fusión en el nivel IL. –

+0

No sé qué hacer.He instalado ilmerge, pero no pude usar.Y no sé cuál es el método cómodo y seguro para combinar. – Javidan

6

Puede utilizar ILMerge utilidad

O puede embed the dlls you want to merge as resources

Aquí el ejemplo de código:

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

Enlace en una publicación. –

+0

Siempre he tenido muchos problemas al intentar cargar archivos DLL incrustados ... ha pasado un tiempo, pero el problema que tenía IIRC era que, incluso con 'Load (byte [])', se intentó cargar el ensamblado desde el disco. –

+0

@pst No hay ningún problema con la carga de ensamblados, ya que puede cargarlo en su propio dominio de aplicación y controlar el acceso y las versiones manualmente sobre él. Y sí, los ensamblados mientras están cargados en el dominio de la aplicación, no pueden volver a cargarse desde el disco o reescribirse por otro ensamblaje, ya están cargados en la memoria. Es por diseño. –

Cuestiones relacionadas