Déploiement d'un contrôle personnalisé et d'assemblys au moment du design

[Cette documentation constitue un aperçu et pourra faire l'objet de modifications dans les versions ultérieures. Des rubriques vierges sont incluses en tant qu'espaces réservés.]

Lorsqu'un outil de conception ouvre l'assembly de votre contrôle personnalisé, il recherche également les assemblys au moment du design associés. Les concepteurs recherchent en particulier les assemblys possédant l'attribut de niveau assembly ProvideMetadataAttribute. Lorsque cet attribut est trouvé, le concepteur recherche une classe qui implémente l'interface IProvideAttributeTable dans l'assembly. Le concepteur interroge la propriété AttributeTable de cette classe pour trouver une collection d'attributs qui spécifie le comportement au moment du design.

Convention d'affectation de noms pour les assemblys au moment du design

Les outils de conception, tels que Visual Studio et Expression Blend, découvrent vos assemblys au moment du design personnalisés à l'aide d'une convention d'affectation de noms. Cette convention a évolué avec les différentes versions des outils. Utilisez le tableau suivant pour nommer vos assemblys en fonction des concepteurs cibles appropriés.

Environnement cible

Convention d'affectation de noms

Exemples de noms

Expression Blend 3 et Visual Studio 2010 

<ControlLibrary>.Design.<version>.dll (commun)

<ControlLibrary>.Expression.Design.<version>.dll (Expression Blend)

<ControlLibrary>.VisualStudio.Design.<version>.dll (Visual Studio)

TailspinToysControls.Design.4.0.dll

TailspinToysControls.Expression.Design.4.0.dll

TailspinToysControls.VisualStudio.Design.4.0.dll

Expression Blend 2 et Visual Studio 2008 

<ControlLibrary>.Design.dll (commun)

<ControlLibrary>.Expression.Design.dll (Expression Blend)

<ControlLibrary>.VisualStudio.Design.dll (Visual Studio)

TailspinToysControls.Design.dll

TailspinToysControls.Expression.Design.dll

TailspinToysControls.VisualStudio.Design.dll

Le mot commun fait référence aux implémentations au moment du design partagées par Visual Studio et Expression Blend. La sous-chaîne <version> indique la version correspondante de l'infrastructure de WPF Designer. Vous pouvez vérifier ceci en contrôlant la version de l'assembly Microsoft.Windows.Design.dll.

Les assemblys au moment du design spécifiques aux outils peuvent substituer l'implémentation partagée dans l'assembly commun. Cela signifie que votre expérience de conception personnalisée peut varier considérablement selon l'outil de conception. Pour plus d'informations, consultez Mise à disposition de métadonnées au moment du design.

Enregistrement d'assemblys au moment du design

Enregistrez votre contrôle et ses assemblys au moment du design associés en suivant la procédure d'inscription des dossiers d'assembly, également appelée inscription AssemblyFoldersEx. L'enregistrement de contrôles à l'aide de la procédure d'inscription de dossiers d'assembly requiert seulement que les assemblys de contrôle existent sur le disque et que les entrées de Registre de la Boîte à outils soient spécifiées. Cette procédure peut avoir lieu avant ou après l'installation de Visual Studio.

AssemblyFoldersEx est une clé de Registre sous chaque version de version cible de .Net Framework, telle que Silverlight 3 ou le .NET Framework 4. AssemblyFoldersEx inclut un jeu des clés qui spécifient les dossiers contenant les assemblys spécifiques à l'infrastructure. Par exemple, pour cibler Silverlight 3, la clé de Registre AssemblyFoldersEx se trouve dans le chemin d'accès au Registre suivant.

[HKCU ou HKLM]\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Silverlight\v3.0\AssemblyFoldersEx

Lorsque la sous-clé Toolbox et ses entrées prises en charge sont créées sous une clé AssemblyFoldersEx, les contrôles s'affichent dans la Boîte à outils, la boîte de dialogue Ajouter des références et la boîte de dialogue Choisir les éléments.

Le tableau suivant répertorie les entrées du Registre qui peuvent être utilisées dans les clés AssemblyFoldersEx et Toolbox pour enregistrer un dossier d'assembly.

Entrée du Registre

Type d'entrée du Registre

Description

Exemple

<assembly>

Clé

Nom de la clé, généralement personnalisé.

[Contrôles TailspinToys]

<dossier d'assembly>

Valeur de chaîne par défaut

Spécifie le chemin d'accès d'installation complet de l'assembly de votre contrôle personnalisé. Les concepteurs rechercheront les assemblys au moment du design dans ce dossier et dans un sous-dossier appelé Design.

@="c:\\Program Files\\Reference Assemblies\\TailspinToys Controls\\Bin\\"

Toolbox

Clé

Ajoutez la clé Toolbox si vous souhaitez que les contrôles à ajouter à la Boîte à outils soient recherchés dans les assemblys de <dossier d'assembly>. Si cette clé n'est pas spécifiée, les contrôles s'affichent dans la boîte de dialogue Choisir les éléments et les assemblys dans la boîte de dialogue Ajouter une référence, mais pas dans la Boîte à outils.

[Boîte à outils]

TabName

Valeur de chaîne

Spécifie le groupe de boîtes à outils par défaut pour les contrôles dans <dossier d'assembly>. Le groupe est créé s'il n'existe pas. Si la valeur n'est pas spécifiée, les contrôles sont installés dans le groupe par défaut de la plateforme.

Utilisez cette valeur pour spécifier une marque au lieu d'une catégorie fonctionnelle. Ne ciblez pas les catégories Commun or Tous les contrôles des contrôles personnalisés WPF et Silverlight. Cette valeur ne peut pas être localisée.

"TabName"="TailspinToys"

Servicing

Touches

Pour forcer l'actualisation du cache de la Boîte à outils, spécifiez une nouvelle clé ou valeur à l'intérieur de la clé Toolbox. La méthode recommandée consiste à créer une sous-clé Updates qui contient une valeur d'inscription pour chaque mise à jour installée. L'actualisation du cache porte uniquement sur les contrôles trouvés dans le dossier spécifique auquel la clé Toolbox appartient, pas sur tous les contrôles de l'infrastructure.

Les personnalisations de boîte à outils de l'utilisateur pour les contrôles d'un dossier d'assembly peuvent être perdues lorsque le dossier d'assembly est actualisé.

[Mises à jour]

"Update3"="1"

"Update7"="1"

Le script du Registre de l'exemple suivant enregistre les assemblys qui ciblent le .NET Framework 4 et se trouvent dans le chemin d'accès des assemblys de référence. Tous les contrôles dont l'attribut ToolboxBrowsableAttribute a la valeur true sont affichés dans la Boîte à outils sous l'onglet Tailspin Toys.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys]
@="c:\\\\Program Files\\\\Reference Assemblies\\\\TailspinToys Controls\\\\Bin\\\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys\Toolbox]
"TabName"="Tailspin Toys"

ToolboxBrowsableAttribute et la clé de Registre de boîte à outils

Vous spécifiez si votre contrôle personnalisé s'affiche dans la Boîte à outils en ajoutant l'attribut ToolboxBrowsableAttribute aux métadonnées au moment du design du contrôle. Pour plus d'informations, consultez Procédure pas à pas : mise à disposition de métadonnées pour les icônes de boîte à outils.

La boîte de dialogue Choisir les éléments permet d'atteindre de nouveaux assemblys et d'ajouter de nouveaux contrôles à la Boîte à outils. Le tableau suivant indique comment l'interaction entre l'attribut ToolboxBrowsableAttribute et la clé de Registre Toolbox détermine le moment où le contrôle personnalisé s'affiche dans la Boîte à outils et la boîte de dialogue Choisir les éléments.

Clé de Registre Toolbox

Pas de clé de Registre Toolbox

ToolboxBrowsable = true

  • Dans la Boîte à outils

  • Dans la boîte de dialogue Choisir les éléments

  • Pas dans la Boîte à outils

  • Dans la boîte de dialogue Choisir les éléments

ToolboxBrowsable = false

  • Pas dans la Boîte à outils

  • Pas dans la boîte de dialogue Choisir les éléments

  • Pas dans la Boîte à outils

  • Pas dans la boîte de dialogue Choisir les éléments

Chargement d'assemblys au moment du design

Les concepteurs chargent vos assemblys au moment du design personnalisés dans un ordre spécifique. Cela permet aux implémentations spécifiques au concepteur de remplacer les implémentations génériques. Pour un contrôle personnalisé déployé dans un assembly intitulé ControlLibrary.dll, la liste suivante indique l'ordre dans lequel les assemblys au moment du design sont chargés.

  1. ControlLibrary.dll (assembly de contrôle)

  2. ControlLibrary.Design.<version>.dll

  3. Design\ControlLibrary.Design.<version>.dll

  4. ControlLibrary.[Expression|VisualStudio].Design.<version>.dll

  5. Design\ControlLibrary.[Expression|VisualStudio].Design.<version>.dll

Les assemblys spécifiques au concepteur remplacent les implémentations déployées dans les assemblys génériques. Par exemple, TailspinToysControlLibrary.VisualStudio.Design.dll peut remplacer des implémentations dans TailspinToysControlLibrary.Design.dll.

De plus, un assembly au moment du design est chargé d'après la <version> spécifiée dans son nom de fichier. Les règles suivantes montrent comment <version> est interprétée par un concepteur.

  • Si <version> possède un numéro de version principale différent de la version d'infrastructure du concepteur, l'assembly de conception n'est pas chargé.

  • Si plusieurs assemblys au moment du design sont compatibles avec la version d'infrastructure du concepteur, le concepteur charge la version compilée sur la version d'infrastructure la plus élevée qui ne dépasse pas la version d'infrastructure du concepteur.

Le tableau suivant indique un exemple de concepteur généré avec la version d'infrastructure 4.1.3.0 qui charge quatre assemblys au moment du design de versions différentes.

Exemple de nom d'assembly au moment du design

Chargement par le concepteur ?

ControlLibrary.Design.3.0.1.0.dll

Non. Version incompatible.

ControlLibrary.Design.4.0.1.0.dll

Non. Chargement possible, mais une version plus récente est disponible.

ControlLibrary.Design.4.1.1.0.dll

Oui. Version la plus proche de celle du concepteur.

ControlLibrary.Design.4.3.dll

Non. Généré sur une version d'infrastructure plus récente que le concepteur.

Actualisation de la Boîte à outils

Lors de la mise à jour d'assemblys dans les dossiers spécifiée par la clé AssemblyFoldersEx, il se peut que vous ayez à actualiser le cache de la Boîte à outils Visual Studio. Le cache contient les noms, catégories et icônes des contrôles qui figurent dans la Boîte à outils. Il n'inclut pas les contrôles ou les assemblys au moment du design. Lors de la compilation des projets, tout contrôle ou assembly au moment du design en service est automatiquement actualisé.

Le cache de boîte à outils d'un dossier d'assembly est mis à jour si une clé AssemblyFoldersEx est modifiée de quelque façon que ce soit (si l'une de ses valeurs ou sous-clés change). La mise à jour se produit à l'initialisation de la Boîte à outils, à la première apparition du volet de tâches Boîte à outils (en général au démarrage de Visual Studio ou lors du chargement de projet).

Pour forcer l'actualisation du cache de la Boîte à outils, spécifiez une nouvelle clé ou valeur à l'intérieur de la clé Toolbox. La méthode recommandée consiste à créer une sous-clé Servicing qui contient une valeur d'inscription pour chaque mise à jour installée. L'actualisation du cache porte uniquement sur les contrôles trouvés dans le dossier spécifique auquel la clé Toolbox appartient, pas sur tous les contrôles de l'infrastructure. Les personnalisations de boîte à outils de l'utilisateur pour les contrôles d'un dossier d'assembly peuvent être perdues lorsque le dossier d'assembly est actualisé.

Voir aussi

Référence

ToolboxBrowsableAttribute

ProvideMetadataAttribute

Concepts

Mise à disposition de métadonnées au moment du design

Autres ressources

Fonctionnement de l'extensibilité du Concepteur WPF

Concepts d'extensibilité de base