Inicio > tiempo de diseño y de Silverlight Silverlight> Asambleas de tiempo de diseño

Silverlight Diseño Asambleas de tiempo

Introducción

Si usted escribe los controles de Silverlight, se debe considerar la escritura de ensamblados en tiempo de diseño para los controles también, por dos sencillas razones:

  • la productividad del desarrollador: tratar de imaginar el desarrollo de Silverlight sin necesidad de herramientas como Visual Studio o de mezcla! Para los controles personalizados, puede que tenga que proporcionar gran parte de la experiencia de tiempo de diseño para los controles en Visual Studio o Mezcle usted mismo.
  • diseñadores: XAML y herramientas como Mezcla de permitir a los desarrolladores y diseñadores trabajar juntos. Un criterio clave de diseño para los controles de Silverlight es para asegurarse de que los diseñadores pueden utilizar sin necesidad de escribir una sola línea de código.

La experiencia en tiempo de diseño por lo general incluye (pero no limitados a) lo siguiente:

  1. Metadatos para la ventana de propiedades, como categoría, InfoTip, propiedad personalizada / unión / colección de editores, etc
  2. Metadatos para la superficie de diseño, como inicializador, adorno, del menú contextual, adaptadores, etc
  3. Caja de herramientas de integración, como los iconos, el registro de control
  4. IntelliSense para el Editor de código

Excepto de IntelliSense (por favor vea Agregar Intellisense rico para los controles de Silverlight ) y el control de registro (por favor vea Registrar controles de Silverlight con Visual Studio y Blend ), sobre la experiencia en tiempo de diseño generalmente se entregan a través de asambleas en tiempo de diseño. A continuación voy a hablar sobre los diversos enfoques de la entrega de experiencias de tiempo de diseño, en la creciente complejidad y flexibilidad, e introducir gradualmente las piezas de la convención de nomenclatura para las asambleas en tiempo de diseño.

Duración de la Asamblea sólo

La forma más sencilla de ofrecer una experiencia en tiempo de diseño es empaquetar el código en tiempo de diseño en las asambleas en tiempo de ejecución, sobre todo cuando el tiempo de diseño de metadatos son significativos en tiempo de ejecución también, como TypeConverterAttribute .

Los pros y los contras de este enfoque:

  • Pro: simple
    • no por separado asambleas en tiempo de diseño, la simplificación de configuración
    • los atributos de tiempo de diseño se especifican directamente en el código de tiempo de ejecución, más fácil de mantener
  • En contra: el acoplamiento apretado de tiempo de ejecución y el código de tiempo de diseño
    • perf, porque la degradación de código inútil el tiempo de diseño en tiempo de ejecución
    • dependencias en tiempo de diseño (como el MWD y otras asambleas VS / Mezcla) ser arrastrado en tiempo de ejecución innecesariamente
    • no puede dar servicio en tiempo de ejecución o de tiempo de diseño independiente
    • no puede soportar varios diseñadores (como tanto VS2008/Blend2 y VS2010/Blend3)

Los contras son particularmente malas para Silverlight, ya que las asambleas en tiempo de diseño son en realidad. NET, con referencias a los tipos de Silverlight. Mezcla de Silverlight y. NET puede ser un reto y confuso, y puede conducir a errores sutiles. Además, las aplicaciones Silverlight son en su mayoría de aplicaciones web, por lo que el tamaño de descarga y el rendimiento son particularmente importantes. Arrastrando en el. NET en aplicaciones de Silverlight ciertamente no ayuda. Así que este enfoque es sumamente desalentador, a menos que exista una justificación sólida para ello.

Diseño compartido Tiempo de montaje

De modo que el avance revolucionario es disociar el tiempo de diseño y la liberación de código de ejecución, y el servicio con las asambleas por separado. Esto abre todo tipo de posibilidades. Por supuesto, necesitamos una forma de vincular las asambleas en tiempo de diseño a sus asambleas en tiempo de ejecución correspondientes, sin introducir ninguna dependencia innecesaria o la degradación de perforación a las asambleas en tiempo de ejecución. De ahí que la convención de nomenclatura: si un conjunto de Foo.dll tiempo de ejecución se hace referencia en un proyecto de Silverlight, el diseñador (como Visual Studio y Blend) primero intentará cargar la información en tiempo de diseño como iconos (a través de otra convención de nomenclatura, vea Cómo agregar una caja de herramientas Icono para el control de Silverlight ) y los metadatos en tiempo de diseño (a través de la interfaz, como IRegisterMetadata de VS2008 y Blend2 o IProvideAttributeTable de VS2010 y Blend3 Por favor vea. Cómo escribir Tiempo de Silverlight Diseño para todos los diseñadores: Visual Studio 2008, Blend 2, Blend 3, y Visual Studio 2010 ) de la asamblea en tiempo de ejecución, que luego se buscará un conjunto de tiempo de diseño por el Foo.Design.dll nombre en el mismo directorio que Foo.dll, si lo encuentra, el diseñador tratará de cargar la información del tiempo de diseño de Foo . Design.dll también.

Diseñador de diseño específico Tiempo de montaje

Visual Studio es principalmente para los desarrolladores, al mismo tiempo de mezcla es sobre todo para los diseñadores, por lo que tienen requisitos diferentes para las experiencias en tiempo de diseño. Poner todo el código de tiempo de diseño en un ensamblado compartido el tiempo de diseño presenta fuerte acoplamiento entre los diseñadores. Así que la convención de nombres es mayor: para el conjunto de Foo.dll tiempo de ejecución, hay un tiempo compartido de diseño Foo.Design.dll ensamblado que se carga por todos los diseñadores, cada diseñador también intentará cargar sus propias asambleas en tiempo de diseño, como Foo.VisualStudio. Design.dll para Visual Studio, y Foo.Expression.Design.dll para la mezcla. El diseñador de montaje específico de tiempo de diseño se ha cargado después de la asamblea en tiempo de diseño compartido. Diseñadores de terceros pueden definir su propio diseñador de montaje específico de tiempo de diseño. Silverlight Toolkit diciembre estrenará en el 2008 se utiliza esta convención de nomenclatura. Por favor, consulte Características de tiempo de diseño de Silverlight Toolkit y tiempo de diseño de implementación de características de Silverlight Toolkit para más información.

Diseño Sub Carpeta

Así que para apoyar tanto a Visual Studio y Blend, cada conjunto tiene tiempo de ejecución de tres asambleas en tiempo de diseño, en el mismo directorio, y un paquete (como Silverlight SDK o kit de herramientas de Silverlight ) por lo general contiene varios conjuntos de tiempo de ejecución. Así que el directorio se hace un poco lleno de gente. Una pequeña mejora es poner las asambleas en tiempo de diseño en una subcarpeta de diseño. Así que la convención de nombres es aún mayor: si un diseñador (como Visual Studio o de mezcla) no puede encontrar correspondientes asambleas en tiempo de diseño en el mismo directorio que una asamblea de tiempo de ejecución, que se verá por ellos en la subcarpeta de diseño, si es que existe.

Varias versiones de MWD

El tiempo de diseño se basan en la parte superior del marco de diseño de ampliación , que consta de varios archivos DLL como Microsoft.Windows.Design.Extensibility.dll y Microsoft.Windows.Design.Interaction.dll. Por lo general, los llaman colectivamente como MWD. Para hacer la vida más interesante, a veces tenemos que introducir cambios importantes en el marco de extensibilidad, como VS2008 y Blend2 uso MWD la versión 3.5, VS2010 y Blend3 uso la versión 4.0 MWD, y que son incompatibles. Así que si usted tiene un conjunto de Foo.dll tiempo de ejecución, y desea que sus usuarios sean capaces de desarrollar en su contra con el VS2008 y VS2010 tanto, usted tiene que proporcionar dos tipos de asambleas en tiempo de diseño: un conjunto construido contra v3.5 MWD y usados por VS2008, y otro conjunto construido contra v4.0 MWD y utilizada por VS2010. Los dos conjuntos de asambleas en tiempo de diseño, probablemente tiene una gran cantidad de código en común, mientras que el de VS2010 puede tener algún nuevo código para aprovechar las nuevas funcionalidades expuestas por el VS2010. Desde las asambleas en tiempo de diseño se cargan por su nombre y no se puede tener dos archivos con el mismo nombre, por lo que la convención de nombres se ha mejorado una vez más:

para un conjunto de tiempo de ejecución Foo.dll, el conjunto de diseño de tiempo compartido se llama * Foo.Design. dll, el conjunto específico de Visual Studio en tiempo de diseño se llama * Foo.VisualStudio.Design. dll, y la mezcla específica de la Asamblea el tiempo de diseño se llama foo . Expression.Design *. dll, donde * puede ser cero o más caracteres válidos para nombres de archivo. Cuando un diseñador (como Visual Studio o de mezcla) intenta cargar un conjunto de tiempo de diseño y ajuste de varios de la convención de nombres, cero o uno se carga:

  • Si la versión del MWD referencia por la asamblea en tiempo de diseño tiene un número diferente de versión mayor que la versión de MWD del diseñador, a continuación, la asamblea en tiempo de diseño no se cargará y se pasa por alto.
  • Si hay más de un diseño-tiempo de montaje es compatible con la versión MWD del diseñador, el Diseñador de carga el un compilado contra la versión más alta MWD que es menor que o igual a la versión MWD del diseñador.

Kit de herramientas de Silverlight 3 octubre 2009 Release utiliza esta convención de nomenclatura para apoyar tanto a VS2008 y Blend3/VS2010. Por favor, vea Tiempo de Silverlight Diseño: Kit de herramientas de actualización de octubre 2009 , Cómo escribir Tiempo de Silverlight Diseño para todos los diseñadores: Visual Studio 2008, Blend 2, Blend 3, y Visual Studio 2010 , y extensibilidad de la Serie - WPF y Silverlight en tiempo de diseño El código compartido - Parte I más información.

Apoyo WPF y Silverlight

Para complicar aún más la vida, ya que WPF y Silverlight son tan terriblemente similar, puede tener la tentación de tratar de escribir una vez y correr con WPF y Silverlight. Usted no está solo. Hay muchos artículos sobre cómo compartir el código fuente y / o binarios a través de Silverlight y WPF. Nos gustaría hacer eso por las asambleas en tiempo de diseño también, es decir, tienen las asambleas mismo tiempo diseñar para WPF y Silverlight controles. Un enfoque consiste en hacer que la mayor parte del tiempo de diseño de la plataforma agnóstica asambleas, y la plataforma de un límite específico (WPF o Silverlight) y el código hace referencia a un conjunto específico de la plataforma pequeña. Silverlight 3 SDK RDA 2 (instalado por VS2010 automáticamente también) utiliza este enfoque para el control DataGrid diseñador (hay un System.Windows.Controls.Data.VisualStudio.Design.4.0.Silverlight.dll en el directorio del SDK). Por favor, consulte la serie de extensibilidad - WPF y Silverlight en tiempo de diseño El código compartido - Parte I para más información.

Victorias Last One

El diseño de metadatos mismo tiempo para una clase o sus miembros se puede especificar varias veces en múltiples asambleas en tiempo de diseño, lo que permite el montaje en tiempo de diseño común para especificar default / comportamiento común y de diseño específicos de las asambleas en tiempo de diseño para reemplazar si es necesario. El diseño de metadatos mismo tiempo también se puede especificar varias veces dentro de un conjunto de diseño sola vez (por favor vea Implementación de funciones de tiempo de diseño de Silverlight Toolkit como un ejemplo, donde DescriptionAttribute para una clase o de su propiedad puede ser añadido por AddDescriptions y AddAttributes y métodos AddTables) . Así que tenemos que saber qué metadatos gana. El diseño más simple y lógica de la mayoría es el último gana. Esto es sobre todo cierto, pero no siempre. A veces el resultado puede ser no-determinista, cuando el diseño de metadatos mismo tiempo se especifica en varias ocasiones, pero con valores diferentes.

Realimentación

El tiempo de diseño parece fácil, pero el diablo está en los detalles! Comentarios y Sugerencias siempre son apreciados. Por favor, hágamelo saber qué problemas te encuentras con lo que las peticiones y mejoras que le gustaría hacer, tanto para el diseño de la experiencia y el marco de extensibilidad de los tiempos de diseño. Gracias!