2009-04-29 11 views
5

Desde Can I build 2 or more dlls from C# project in Visual Studio 2008?, tengo otra idea para crear solo 1 gran proyecto. Después de eso, separé un proyecto dll (que contiene muchas clases) en 1 dll por clase mediante el uso del evento post-build para llamar al proyecto de la aplicación Win (por separado, un dll grande). ¿Como hacer esto?¿Puedo separar un dll grande en 1 dll por clase?

Además, tengo que administrar el archivo adjunto en un dll grande también.

actualización he encontrado un truco que me podría guiar a resolver este problema mediante de generación personalizada? Además, creo que puedo crear un controlador personalizado que genere un archivo de ensamblaje dinámico utilizando el archivo de módulo separado & al.exe. Pero esta característica está por encima de mi expectativa y no es sincera (el código fuente rara vez se cambia).

Multi-file Assemblies: What and How

How to: Build a Multifile Assembly

POCO Custom Multifile Assembly and ReSharper

Gracias,

+6

¿Por qué querrías hacer esto? –

+0

Creo que obtendrías mejores respuestas si resaltas que esto es para los controles de Silverlight ... –

+0

Si tienes un sitio web grande que usa Silverlight para mostrar, pasarás mucho tiempo cargando la página de inicio. –

Respuesta

3

Este problema se resuelve por encargo de la escritura de MSBuild que se explica en otra pregunta.

<ItemGroup> 
    <Compile Include="Class1.cs"> 
    <Plugin>true</Plugin> 
    </Compile> 
    <Compile Include="Class2.cs" /> 
    <Compile Include="Class3.cs"> 
    <Plugin>true</Plugin> 
    </Compile> 
    <Compile Include="Program.cs" /> 
    <Compile Include="Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

Visual studio one project with several dlls as output?

Gracias @franko_camron para la sugerencia.

7

La respuesta que obtendrá aquí no es diferente de la respuesta en la otra pregunta: put in a separate project for each separate dll.

Lo que quiero preguntarte es cuál es tu comprensión de la definición de "clase". Una clase por DLL probablemente significa que no está muy familiarizado con el funcionamiento de ensamblados, espacios de nombres y clases.

Cuéntanos, ¿qué es lo que realmente quieres ser capaz de hacer? Porque lo que crees que deberías hacer para resolver ese problema (por ejemplo, crear una DLL por clase) no es práctico.

actualización

Teniendo en cuenta el contexto de sus necesidades (por ejemplo, aplicación web de Silverlight), mi conclusión es que dividir sus clases a varios archivos DLL no dará lugar a una mejora del rendimiento en un Web ASP.NET página porque:

  • DLL sólo son utilizados por el servidor, no son descargado a través de HTTP al navegador
  • Una vez que una aplicación web carga una DLL, no volverá a cargarla, independientemente de cuántos usuarios estén usando su sitio al mismo tiempo. Una instancia de DLL por servidor.
  • Cuando inicie su aplicación web, cargará todas las DLL de las que dependió para compilar, lo use o no.

De modo que con sus requisitos, probablemente sea mejor NO utilizar Silverlight para su aplicación, teniendo en cuenta el límite de ancho de banda. Las avenidas que puede explorar son:

  • Aprendizaje de técnicas AJAX, específicamente JSON, (y probablemente no ASP.NET AJAX y su fácil de uso indebido UpdatePanel)
  • aprendizaje jQuery para encontrar los controles que implementarán en JavaScript lo que quiere hacer uso de Silverlight
+0

es posible que desee agregar un enlace a la pregunta relacionada – karlipoppins

+2

En otras palabras, "Usted sigue haciendo esta pregunta. ¡No creo que signifique lo que cree que significa!" :) –

+0

está en su pregunta. :) –

8

Sólo ... ¿por qué? Tener muchos dlls puede tener un impacto en el rendimiento en el inicio de la aplicación (debido a la "fusión"). También será bastante inmediatamente sufren de referencias circulares, que es lo malo.

Como el código .NET (de forma predeterminada) se JITted cuando se usa por primera vez, no hay un gran impacto al tener clases adicionales en un dll que no se utilizan en esa aplicación. Simplemente se sientan allí, en silencio, sin molestar a nadie.

El costo de administración puro de tener un dll por clase hará que la implementación, etc. insoportable.

Con todo, no puedo pensar en una razón sensata para hacer esto ...

+0

Porque quiero crear una aplicación Silverlight como formulario web (1 usercontrol de Silverlight equivale a 1 página web). Entonces, necesito crear 1 dll para 1 usercontrol de Silverlight. –

+0

De vez en cuando separe las clases grandes como el DAL para acortar el tiempo de compilación de las clases BLL. Pero para hacer eso para cada clase, tienes razón; no hay "razón sensata". – rizzle

+0

Es cierto. Para la aplicación en un solo lugar, esta idea no es prudente. Pero para la aplicación servidor/cliente, esta idea es genial, si puede ser cierta (creando una página de Silverlight casi igual creando página web). –

Cuestiones relacionadas