2009-12-10 19 views
9

Tengo una aplicación web ASP.NET desarrollada en Visual Studio 2008, compuesta de 3 proyectos diferentes (uno para UI, uno de BO y el tercero para DAL).Visual Studio 2008: crear una DLL única desde la solución con muchos proyectos

¿Cómo puedo generar un solo archivo de ensamblaje que contenga los 3? Ahora está generando 3 DLLS para cada proyecto en la solución.

+0

no ese tipo de frustrar el propósito de tener un proyecto de n niveles? – slugster

+2

¿Podría ser para facilitar el despliegue? –

+1

Y distribución también. –

Respuesta

17

Para cada uno de sus proyectos de crear un netmodule o un conjunto y compilar/fusionar a todos en un solo conjunto.

Primera alternativa. Esto fue propuesto por Jay R. Wren:

Este es un truco lindo, pero con el CSC y VBC tanto el apoyo a los /target:module y /addmodule opciones, en realidad se podría hacer esto sin ILMerge sólo mediante el uso de un script de shell o haz un archivo.

Visual Studio no admite el tipo "netmodule", pero MSBuild sí.

Agregue el proyecto VB a su solución. Descargue el proyecto y edite el archivo del proyecto.

Cambio OutputType al módulo:

<OutputType>module</OutputType> 

En lugar de añadir una referencia al proyecto deseado, se añade un módulo. Lamentablemente, otra vez VStudio falla aquí, pero MSBUILD funciona bien. Descargue el proyecto y edite el archivo del proyecto. Agregue un grupo de elementos con AddModules include directives.

<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup> 

Esto le dirá msbuild para contar CSC utilizar /addmodule directivas, al igual que el grupo de artículos de referencia, que se las arregla estudio.

Desventaja principal: No Visual Studio Intellisense para el módulo agregado. Ya tenemos referencias, es una lástima que no tengamos módulos. [ACTUALIZACIÓN: como @Ark-kun señaló en otro lugar, Visual Studio puede referencia .netmodule proyectos y tienen Intellisense. Simplemente agregue la referencia del proyecto ANTES de cambiar el tipo de salida.]

SharpDevelop tiene el primer paso, pero el segundo paso, un guión "Agregar módulo" se ha abierto como elemento de baja prioridad desde SD 2.0.

Segunda manera.Estegreat article (por Scott Hanselman) describe la forma de asambleas se fusionan de forma automática si está utilizando Visual Studio. Se hace le dan compatibilidad con IntelliSense , a diferencia de la primera alternativa .

tercer camino. Hágalo manualmente con scs. Ejemplo
cómo crear varios módulos y enlace tema en un solo archivo DLL:

csc /t:module RarelyUsedTypes.cs 
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs 

Para más información ver el libro CLR via C# de Richter.

+1

Las tres formas producen un solo conjunto. Pero solo la segunda forma te da un solo ** archivo **. –

Cuestiones relacionadas