Comment écrire Time Design Silverlight pour tous les concepteurs: Visual Studio 2008, Blend 2, Blend 3 et Visual Studio 2010
Introduction
Cela fait partie de la série sur le temps de mise en œuvre des changements de conception dans Silverlight Toolkit Mars 2009 Release . Ce message met l'accent sur les changements de rupture dans le cadre d'extensibilité designer introduit dans Silverlight 3/Blend Studio 3/Visual 2010, et comment développer Silverlight moment de la conception à soutenir tous les concepteurs: Visual Studio 2008/Blend 2 et Visual Studio 2010/Blend 3.
Silverlight 2 temps de conception pour Visual Studio 2008 et Blend 2
Visual Studio et de partager Blend l'extensibilité designer même cadre, et l'utiliser à la fois pour WPF et Silverlight. extensibilité Concepteur WPF sur MSDN est probablement la meilleure référence disponible pour le cadre d'extensibilité designer. La Décembre 2008 Communiqué de Silverlight Toolkit est basé sur Silverlight 2 (aka SL2), et a un support pour Visual Studio 2008 VS9 alias () et Blend 2. C'est un exemple bien réel du monde à démontrer la façon de développer Silverlight 2 caractéristiques de la conception pour VS9 et Blend 2. Mon blog post moment du design d'entité de mise en œuvre dans Silverlight Toolkit explique en détail comment cela est fait, et les lecteurs cadre de mise en œuvre peuvent utiliser dans leur mise en œuvre de conception propre temps.
Pour rappel, le cadre de Silverlight 2 temps de conception pour Visual Studio 2008 et Blend 2 en quelques mots:
- MWD: le cadre d'extensibilité moment du design est exposé à travers une série d'assemblées, notamment Microsoft.Windows.Design.dll, Microsoft.Windows.Design.Extensibility.dll et Microsoft.Windows.Design.Interaction.dll. Collectivement ces ensembles sont appelés MWD. Ils sont installés sous%% DevEnvDir \ PublicAssemblies (C: \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PublicAssemblies en 32bit OS, ou C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PublicAssemblies en 64bit OS). Ils sont également GAC-ed. La plupart des projets de la conception de référence besoin de ces DLL MWD. Visual Studio 2008 et utiliser Blend 2 MWD version 3.5.
- Naming Convention: Visual Studio et Blend assemblées charge de calcul du temps en utilisant une convention de nommage: pour l'assemblage de contrôle Foo.dll, VS et Blend trouverez ses assemblées moment du design avec le nom, Foo.Design.dll Foo.VisualStudio.Design.dll, et Foo.Expression.Design.dll, dans le même répertoire où est Foo.dll, ou le répertoire sous Design. Visual Studio se charge Foo.Design.dll et Foo.VisualStudio.Design.dll, tandis que Blend chargera Foo.Design.dll et Foo.Expression.Design.dll. Il est donc conseillé de mettre le temps de conception des caractéristiques communes à tous les designers. Design.dll, et de mettre Visual Studio et Blend caractéristiques particulières de la conception en. VisualStudio.Design.dll et. Expression.Design.dll respectivement.
- Point d'entrée: lorsque Visual Studio ou des charges Blend une assemblée moment de la conception, il utilise la réflexion pour trouver toutes les classes qui implémentent IRegisterMetadata , et appelle sa méthode ne Registre . Silverlight Toolkit Décembre 2008 Release a une mise en œuvre le cadre du temps de conception détaillée dans les précédents post blog moment du design Mise en œuvre d'entité dans Silverlight Toolkit .
screenshots ci-dessous des Silverlight.Controls.Design.sln dans Silverlight 2 source Toolkit en Mars 2009 Release démontre la mise en œuvre de temps de conception pour SL2 VS9 Blend 2 et discutés ci-dessus:
Ce qui change en Silverlight 3, Blend 3 et Visual Studio 2010
Comme indiqué dans WPF Designer extensibilité Architecture sur MSDN:
Le Concepteur WPF prend en charge le cadre d'extensibilité complète. Expression Blend prend en charge que les éditeurs de propriétés, le chargement des métadonnées, et les licences. Mélange de ne pas soutenir les actions du menu et adorners.
Blend 2 ci-dessus a un support limité pour les délais de conception Silverlight aussi, mais Visual Studio 2008 a peu de soutien pour les délais de conception Silverlight (juste les icônes, le chargement de métadonnées pour quelques attributs comme ToolboxBrowsableAttribute): il est plus une visionneuse d'un designer. Pour avoir la parité WPF Silverlight pour le soutien de la conception, Blend 3 et Visual Studio 2010 (aka VS10) ont d'introduire des modifications à briser le cadre d'extensibilité créateur (c.-à-MWD), notamment:
- MWD: la plupart du concepteur d'extensibilité cadre API restent les mêmes, mais leurs changements physiques emballage: Microsoft.Windows.Design.dll est parti, et la version des assemblées MWD tous les changements de 3,5 à 4,0. Avant de Visual Studio 2010 Beta1, la seule façon d'obtenir le MWD nouvelle via Blend 3 Preview, et sa version est de 3,7 au lieu de 4,0 pour l'instant:
- Point d'entrée: au lieu de refléter à travers IRegisterMetadata implémentations, Blend 3 et Visual Studio 2010 d'utiliser un nouvel attribut Assemblée ProvideMetadataAttribute, et le metadataProviderType doit mettre en œuvre IProvideAttributeTable:

- Naming Convention: en raison des changements de rupture comme version MWD et point d'entrée, les délais de conception existants ensembles développés contre 3,5 MWD ne se charge pas dans le mélange 3 et Visual Studio 2010, vous devez écrire le temps de conception de nouvelles contre le nouveau 4,0 MWD pour Blend 3 et Visual Studio 2010. Bien que ce soit OK pour Blend (puisque vous ne pouvez utiliser Blend 3 avec Silverlight 3 et Blend 2 avec Silverlight 2), ce qui crée un défi pour Visual Studio, car vous pouvez utiliser Visual Studio 2008 pour le développement Silverlight 3, ainsi que Visual Studio 2010 pour le développement Silverlight 2.
tableau ci-dessous répertorie tous les scénarios pris en charge et quelle version de MWD est utilisé pour charger les assemblées moment de la conception:
| SL \ Designer | VS9 | VS10 | Blend2 | Blend3 |
| SL2 | MWD3.5 | MWD4.0 | MWD3.5 | |
| SL3 | MWD3.5 | MWD4.0 | MWD4.0 |
Nous ne pouvons pas construire un ensemble de la conception contre deux MWDs incompatibles, c'est pourquoi nous devons créer deux ensembles de temps de conception, les uns contre les MWD. ensembles de temps de conception sont chargés par leur nom, et nous ne pouvons pas avoir deux assemblées avec le même nom dans le même endroit, de sorte que le moment de la conception de chargement Assemblée mécanisme (c.-à-la convention de nommage) doit changer, pour permettre plusieurs versions de la même coexistent Assemblée moment du design.
En attendant la nouvelle convention de dénomination pour sortir avec Blend 3 et Visual Studio 2010 RTM, nous pouvons faire quelque chose d'intelligent maintenant à soutenir à la fois VS9 et VS10. Se souvenir de convention de nommage en vigueur permet de Visual Studio et Blend chaque calcul deux ensembles de conception:
| DLL \ Designer | Visual Studio | Mélange |
| Foo.Design.dll | X | X |
| Foo.VisualStudio.Design.dll | X | |
| Foo.Expression.Design.dll | X |
alors nous pouvons construire les deux assemblées contre différentes versions de MWD:
- Pour Silverlight 3, nous pouvons avoir la commune. Design.dll construire contre MWD 4.0, donc il peut être chargé par les deux VS10 et Blend 3. Nous avons alors. VisualStudio.Design.dll construire contre MWD 3,5 et deux exemplaires de tout partagé. Design.dll, alors il peut être chargé par VS9. Il ya un problème mineur si: nous n'avons pas un endroit pour mettre Visual Studio caractéristiques particulières de temps de conception des VS10, comme l'utilisation de ToolboxBrowsableAttribute (faux) pour masquer certaines commandes de la boîte à outils Visual Studio plus en plus encombré, depuis VS10 ne peut pas charger la . VisualStudio.Design.dll construire contre MWD 3.5. Ce sera résolu avec la nouvelle convention de dénomination fois Visual Studio 2010 RTM.
| DLL \ MWD \ Designer | MWD | VS9 | VS10 | Blend3 |
| Foo.Design.dll | 4.0 | X | X | |
| Foo.VisualStudio.Design.dll | 3,5 | X | ? | |
| Foo.Expression.Design.dll | 4.0 | X |
- Pour Silverlight 2, suivre la même approche: le partage. Design.dll construire contre MWD 4.0, mais avoir les deux. VisualStudio.Design.dll et. Expression.Design.dll construire contre MWD 3,5 et double tout en commun. Design.dll . De cette façon, les deux VS9 et Blend 2 fonctionnent parfaitement, mais avec la même question qu'il n'y a pas lieu de mettre Visual Studio caractéristiques spécifiques pour VS10. Encore une fois, qui sera résolu avec la nouvelle convention de nommage dans VS10.
| DLL \ MWD \ Designer | MWD | VS9 | VS10 | Blend2 |
| Foo.Design.dll | 4.0 | X | X | |
| Foo.VisualStudio.Design.dll | 3,5 | X | ? | |
| Foo.Expression.Design.dll | 3,5 | X |
Mise en œuvre d'entité Design temps dans Silverlight 3 Toolkit
MWD
Les projets de conception dans Silverlight 3 Toolkit en Mars 2009 Release suivi mentionnés ci-dessus schéma de soutien à la fois Visual Studio 2008 et Visual Studio 2010, ainsi que Blend 3.
Télécharger le Mars 2009 Release , décompressez le code source, la charge Silverlight.Controls.Design.sln dans Visual Studio 2008. Utilisez le simple projet Control.Input.Design comme par exemple:
- Les projets de design pour les besoins de VS9/Blend3 pour faire référence à la nouvelle 4,0 MWD. Ici, nous utilisons de pré-construction événement d'invoquer CopySystemWindows.bat pour localiser Blend 3 et copier les deux DLL dans le répertoire MWD Binaries.
- S'il vous plaît noter les modifications mineures CopySystemWindows.bat fichier: nous avons besoin de citer "THIS_DIR%% \ Binaries \ Blend3" (lignes en jaune) pour traiter les cas où il ya un espace dans le chemin vers le répertoire du code source est décompressés.
Si vous n'aimez pas le fichier fragiles CopySystemWindows.bat ou en utilisant la construction des événements, vous pouvez définir des chemins de référence pour aider à Visual Studio trouver où les MWD nouveau, comme indiqué ci-dessous. Le seul inconvénient est que vous devez spécifier à la fois% programfiles% et% programfiles (x86)% pour le rendre s'appuyer sur deux machines x86 et x64.
Les chemins de référence de réglage est persisté dans la csproj.user. Fichier:
<Projet xmlns = " http://schemas.microsoft.com/developer/msbuild/2003 " >
<PropertyGroup>
<ReferencePath> C: \ Program Files \ \ Microsoft Expression Blend \ 3 Preview; c: \ Program Files (x86) \ Microsoft Expression Blend 3 Aperçu \ </> ReferencePath
</ PropertyGroup>
</ Project>
Metadata.cs
J'utilise le cadre de mise en œuvre même que celle décrite dans le temps de conception de mise en œuvre dans Silverlight Toolkit entité , avec quelques modifications mineures:
- Je me suis déplacé des liens vers des fichiers partagés Extensions.cs et MetadataBase.cs du dossier Controls.Design.Common en vertu d'un dossier de la solution avec le même nom;
- Metadata.cs en. Conception et. Projets Expression.Design utiliser le nouveau point d'entrée: attribut d'assembly utilisation ProvideMetadata, et mettre en oeuvre l'interface IProvideAttributeTable;
- Ajouter noter que tout en AddAttributes () la méthode doit être dupliqué dans correspondants. VisualStudio.Design projet.
Le VisualStudio.Design. Projets de toujours utiliser l'ancienne interface IRegisterMetadata dans MWD 3.5, mais:
- sous le dossier Controls.Design sont des liens vers tous les fichiers dans Metadata.cs * correspondant. projet de construction;
- AddAttributes () méthode de double emploi avec le contenu de AddAttributes () dans correspondants. Conception du projet.
Conclusion
Bien que les modifications de rupture dans MWD peut causer certains inconvénients, il est nécessaire de mettre en œuvre aussi riche d'une expérience de la conception pour Silverlight que pour WPF. Ce post décrit un moyen de gérer les changements de rupture et encore soutenir tous les créateurs actuels: Visual Studio 2008, Blend 2, et Blend 3. Une fois que Visual Studio 2010 est accessible au public, je blog sur la nouvelle convention de nommage, et comment le travail Toolkit moment du design dans Visual Studio 2010. Restez à l'écoute!
05/12/2009: Mise à jour pour VS2010 Beta2
Pour résoudre problème ci-dessus de soutenir à la fois Visual Studio et Visual Studio 2008/Blend2 2010/Blend3, qui utilisent des versions incompatibles de MWDs (v3.5 vs. V4.0), la convention de nommage pour les ensembles de la conception est renforcée à partir de VS2010 Beta2 et Blend 3:
pour une assemblée d'exécution Foo.dll, le temps de conception assembly partagé est nommé Foo.Design *. dll, le Visual Studio de conception Assemblée moment est nommé Foo.VisualStudio.Design *. dll, et le mélange de conception de montage de temps spécifique est appelé foo . Expression.Design *. dll, où * peut être zéro ou plusieurs caractères valides pour les noms de fichiers. Quand un designer (comme Visual Studio ou un mélange) tente de charger un ensemble de conception et l'aménagement du temps de plusieurs la convention de nommage, zéro ou un sera chargé:
- Si la version MWD référencés par les temps de montage de conception a un numéro de version majeure différente de celle de MWD version concepteur, le temps de montage design ne se charge pas et est ignorée.
- Si la conception d'un temps de montage est compatible avec plus de MWD version concepteur, les charges Designer celui compilé avec la version la plus MWD qui est inférieure ou égale à la version MWD concepteur.
Silverlight 3 SDK RDA 2 (également installé par VS2010 automatiquement) et Silverlight 3 Toolkit Octobre 2009 Release utiliser la nouvelle convention de dénomination pour soutenir les VS2008 et VS2010. Prenez System.Windows.Controls.dll par exemple, System.Windows.Controls.VisualStudio.Design.dll est construit contre MWD 3,5 et est utilisé par VS2008, qui utilise l'ancienne convention de nommage, un System.Windows.Controls.Toolkit nouvelle. VisualStudio.Design.4.0.dll construit contre MWD 4.0 est ajouté pour VS2010, qui comprend la nouvelle convention de nommage. S'il vous plaît voir Silverlight Design assemblées temps pour plus d'informations.








Les commentaires récents