2010-07-06 5 views
6

Visual Studio copia por defecto todos los dlls en la carpeta bin de cada proyecto. Esto también incluye el sistema dlls '(con la excepción de mscorlib.dll y System.dll), como System.Xml.Linq, System.ComponentModel.Composition (incluido desde SL4) etc.Copie dlls locales y del sistema ': ¿cuál es el punto?

Dado que estos archivos están incluidos en cada tamaño de XAP, XAP crece considerablemente. En mis pruebas limitadas, configurar "Copiar local" en falso no parece romper nada. ¿Por qué Visual Studio agrega estos archivos a la ruta bin? Como un usuario ya tendría Silverlight, ¿puedo asumir que estos ensamblados ya están instalados en el GAC de cada usuario o me falta algo?

Respuesta

5

Los archivos que se menciona no están incluidas en el tiempo de ejecución de la instalación de Silverlight. Una aplicación de Silverlight que use estas bibliotecas debe proporcionarlas al usuario como parte de la descarga.

Puede minimizar el impacto estableciendo la opción "Reducir el tamaño de XAP usando la memoria caché de la biblioteca" en la pestaña de Silverlight de las páginas de propiedades del proyecto.

Esta opción hace que cada uno de estos archivos se coloque en archivos Zip separados que se colocarán en la misma carpeta que el XAP.

Esto ayuda en los escenarios en los que su sitio puede tener múltiples Xaps para varias aplicaciones o donde publica nuevas versiones con frecuencia. Para una sola aplicación que cambia raramente o que recibe muchos visitantes únicos, no es tan útil.

+0

Totalmente tiene sentido. Gracias por la información ... muy útil. – user1961100

0

No Por defecto, los dll's que son específicos del framework que generalmente se almacenan en GAC no se copian en el directorio bin de salida, y puede suponer que estarán en el equipo del cliente.

Copiar local en lo mencionado anteriormente están predeterminados a falso, por lo que creo que en algún momento se cambiaron a verdadero.

Sin embargo, sin saber exactamente qué DLL se hace referencia a que no puedo decir exactamente

+0

En mi caso, son System.Xml.Linq, System.Windows, System.ComponentModel.Composition, System.Runtime.Serialization y System.Windows.Browser. –

+0

@Blake: todos esos dlls son parte del SDK y deberán proporcionarse desde su sitio como bibliotecas en caché (ver mi respuesta) o como parte de Xap. – AnthonyWJones

0

Creo que la clave aquí es "no parece romper nada". Debido a que las aplicaciones de Silverlight se pueden ejecutar en muchas plataformas y navegadores con versiones diferentes, no puede asumir que algo funcionará porque funciona en su máquina o incluso en una o dos más.

Si los archivos DLL están incluidos es porque son potencialmente necesarios, por lo que debe estar seguro de que estarán allí si planea una distribución amplia de su aplicación.

Por ejemplo, he estado trabajando en una aplicación basada en Prism con retraso en la carga de módulos. La mayoría de los XAP han sido reducidos a alrededor de 20k porque se garantiza que los módulos secundarios podrán usar las DLL que requieren ya que están en el Shell XAP.

Cuestiones relacionadas