Distribuzione di un controllo personalizzato e di assembly della fase di progettazione

Quando uno strumento di progettazione apre l'assembly del controllo personalizzato, cerca anche gli assembly della fase di progettazione correlati. In particolare, le finestre di progettazione cercano assembly che dispongono dell'attributo ProvideMetadataAttribute a livello di assembly. Quando questo attributo viene individuato, la finestra di progettazione cerca nell'assembly una classe che implementa l'interfaccia IProvideAttributeTable. La finestra di progettazione esegue una query sulla proprietà AttributeTable di questa classe per individuare un insieme di attributi che specifica il comportamento in fase di progettazione.

Convenzione di denominazione per gli assembly della fase di progettazione

Gli strumenti di progettazione, ad esempio Visual Studio ed Expression Blend, individuano gli assembly della fase di progettazione personalizzati tramite una convenzione di denominazione. Questa convenzione si è evoluta nelle diverse versioni degli strumenti. Utilizzare la tabella seguente per denominare gli assembly per le finestre di progettazione di destinazione appropriate.

Ambiente di destinazione

Convenzione di denominazione

Nomi di esempio

Expression Blend 3 e Visual Studio 2010 

<LibreriaControlli>.Design.<versione>.dll (Comune)

<LibreriaControlli>.Expression.Design.<versione>.dll (Expression Blend)

<LibreriaControlli>.VisualStudio.Design.<versione>.dll (Visual Studio)

TailspinToysControls.Design.4.0.dll

TailspinToysControls.Expression.Design.4.0.dll

TailspinToysControls.VisualStudio.Design.4.0.dll

Expression Blend 2 e Visual Studio 2008 

<LibreriaControlli>.Design.dll (Comune)

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

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

TailspinToysControls.Design.dll

TailspinToysControls.Expression.Design.dll

TailspinToysControls.VisualStudio.Design.dll

La descrizione "Comune" fa riferimento a implementazioni della fase di progettazione condivise da Visual Studio e da Expression Blend. La sottostringa <versione> specifica la versione corrispondente del framework WPF Designer. È possibile verificare questo dato controllando la versione dell'assembly Microsoft.Windows.Design.dll.

Gli assembly della fase di progettazione specifici dello strumento possono eseguire l'override dell'implementazione condivisa nell'assembly comune. Pertanto, la progettazione personalizzata può variare notevolmente con strumenti di progettazione diversi. Per ulteriori informazioni, vedere Aggiunta di metadati della fase di progettazione.

Registrazione di assembly della fase di progettazione

Registrare il controllo e gli assembly della fase di progettazione correlati tramite la procedura di registrazione della cartella dell'assembly, denominata anche registrazione AssemblyFoldersEx. Per registrare i controlli tramite la procedura di registrazione della cartella dell'assembly, è necessario solo che gli assembly del controllo siano presenti sul disco e che le voci del Registro di sistema della casella degli strumenti siano specificate. La procedura di registrazione può verificarsi prima o dopo l'installazione di Visual Studio.

AssemblyFoldersEx è una chiave del Registro di sistema sotto ogni versione del framework di destinazione, ad esempio Silverlight 3 o .NET Framework 4. AssemblyFoldersEx include un set di chiavi che specificano le cartelle contenti assembly specifici del framework. Ad esempio per avere come destinazione Silverlight 3, la chiave del Registro di sistema AssemblyFoldersEx si trova nel percorso del Registro di sistema riportato di seguito.

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

Quando la sottochiave Toolbox e le voci di supporto vengono create sotto una chiave AssemblyFoldersEx, i controlli vengono visualizzati nella casella degli strumenti, nella finestra di dialogo Aggiungi riferimenti e nella finestra di dialogo Scegli elementi.

Nella tabella seguente vengono elencate le voci del Registro di sistema che possono essere utilizzate nelle chiavi AssemblyFoldersEx e Toolbox per registrare una cartella dell'assembly.

Voce del Registro di sistema

Tipo di voce del Registro di sistema

Descrizione

Esempio

<assembly>

Chiave

Nome della chiave, in genere personalizzato.

[TailspinToys Controls]

<cartella dell'assembly>

Valore stringa predefinito

Specifica il percorso di installazione completo per l'assembly del controllo personalizzato. Le finestre di progettazione cercheranno gli assembly della fase di progettazione in questa cartella e in una sottocartella denominata Design.

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

Toolbox

Chiave

Aggiungere la chiave Toolbox se si desidera effettuare una ricerca all'interno degli assembly nella <cartella dell'assembly> per individuare i controlli da aggiungere alla casella degli strumenti. Se questa chiave non viene specificata, i controlli vengono visualizzati nella finestra di dialogo Scegli elementi e gli assembly nella finestra di dialogo Aggiungi riferimento, ma non nella casella degli strumenti.

[casella degli strumenti]

TabName

Valore stringa

Specifica il gruppo della casella degli strumenti predefinito per i controlli nella <cartella dell'assembly>. Se il gruppo non esiste, verrà creato. Se non viene specificato il valore, i controlli verranno installati nel gruppo predefinito per la piattaforma.

Utilizzare questo valore per specificare un marchio anziché una categoria funzionale. Non specificare come destinazione le categorie Comune o Tutti i controlli per i controlli personalizzati WPF e Silverlight. Il valore non può essere localizzato.

"TabName"="TailspinToys"

Servicing

Chiavi

Per forzare un aggiornamento della cache della casella degli strumenti, specificare una nuova chiave o un nuovo valore nella chiave Toolbox. La modalità consigliata per questa operazione consiste nella creazione di una sottochiave Updates che contiene un valore di registrazione per ogni aggiornamento installato. L'aggiornamento della cache è destinato solo ai controlli che si trovano nella cartella di appartenenza specifica della chiave Toolbox, non a tutti i controlli del framework.

È possibile che le personalizzazioni della casella degli strumenti dell'utente per i controlli di una cartella dell'assembly vadano perse quando viene aggiornata la cartella dell'assembly.

[Updates]

"Update3"="1"

"Update7"="1"

Nel seguente script di esempio del Registro di sistema, vengono registrati gli assembly che hanno come destinazione .NET Framework 4 e che si trovano nel percorso Reference Assemblies. Tutti i controlli in cui ToolboxBrowsableAttribute è true vengono visualizzati nella scheda Tailspin Toys della casella degli strumenti.

[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 e la chiave del Registro di sistema della casella degli strumenti

Per specificare se il controllo personalizzato viene visualizzato nella casella degli strumenti, aggiungere ToolboxBrowsableAttribute ai metadati della fase di progettazione del controllo. Per ulteriori informazioni, vedere Procedura dettagliata: aggiunta di metadati alle icone della casella degli strumenti.

La finestra di dialogo Scegli elementi consente di passare ai nuovi assembly e aggiungere nuovi controlli alla casella degli strumenti. Nella tabella riportata di seguito viene illustrato come l'interazione tra ToolboxBrowsableAttribute e la chiave del Registro di sistema Toolbox determina quando il controllo personalizzato viene visualizzato nella casella degli strumenti e nella finestra di dialogo Scegli elementi.

Chiave del Registro di sistema Toolbox

Nessuna chiave del Registro di sistema Toolbox

ToolboxBrowsable = true

  • Nella casella degli strumenti

  • Nella finestra di dialogo Scegli elementi

  • Non nella casella degli strumenti

  • Nella finestra di dialogo Scegli elementi

ToolboxBrowsable = false

  • Non nella casella degli strumenti

  • Non nella finestra di dialogo Scegli elementi

  • Non nella casella degli strumenti

  • Non nella finestra di dialogo Scegli elementi

Caricamento degli assembly della fase di progettazione

Le finestre di progettazione caricano gli assembly della fase di progettazione personalizzati con un ordine specifico. Ciò consente alle implementazioni specifiche della finestra di progettazione di sostituire le implementazioni generiche. Nell'elenco seguente viene mostrato l'ordine nel quale vengono caricati gli assembly della fase di progettazione per un controllo personalizzato distribuito in un assembly denominato ControlLibrary.dll.

  1. ControlLibrary.dll (assembly del controllo)

  2. ControlLibrary.Design.<versione>.dll

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

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

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

Gli assembly specifici della finestra di progettazione sostituiscono le implementazioni distribuite negli assembly generici. Ad esempio, è possibile che TailspinToysControlLibrary.VisualStudio.Design.dll sostituisca le implementazioni in TailspinToysControlLibrary.Design.dll.

Inoltre, un assembly della fase di progettazione viene caricato in base alla <versione> specificata nel relativo nome file. Le regole seguenti mostrano come <versione> viene interpretato da una finestra di progettazione.

  • Se in <versione> è presente un numero di versione principale diverso dalla versione del framework della finestra di progettazione, l'assembly della progettazione non viene caricato.

  • Se più di un assembly della fase di progettazione è compatibile con la versione del framework della finestra di progettazione, la finestra di progettazione carica la versione compilata con la versione del framework più recente, che non superi la versione del framework della finestra di progettazione.

Nella tabella seguente viene mostrato un esempio di una finestra di progettazione compilato con la versione del framework 4.1.3.0 che carica quattro assembly della fase di progettazione con versioni diverse.

Nome di esempio dell'assembly della fase di progettazione

Caricamento da parte della finestra di progettazione

ControlLibrary.Design.3.0.1.0.dll

No. Versione non compatibile.

ControlLibrary.Design.4.0.1.0.dll

No. Potrebbe essere caricato, ma è disponibile una versione più recente.

ControlLibrary.Design.4.1.1.0.dll

Sì. Il più vicino alla versione della finestra di progettazione.

ControlLibrary.Design.4.3.dll

No. Compilato con una versione del framework più recente rispetto a quella della finestra di progettazione.

Aggiornamento della casella degli strumenti

Quando si aggiornano assembly nella cartelle specificate dalla chiave AssemblyFoldersEx, potrebbe essere necessario aggiornare la cache della casella degli strumenti di Visual Studio. La cache contiene i nomi, le categorie e le icone per i controlli visualizzati nella casella degli strumenti. La cache non include il controllo o gli assembly della fase di progettazione. Durante la compilazione dei progetti, tutti i controlli gestiti o gli assembly della fase di progettazione vengono aggiornati automaticamente.

La cache della casella degli strumenti per la cartella dell'assembly viene aggiornata se una chiave AssemblyFoldersEx viene modificata in qualsiasi modo, con qualsiasi modifica ai valori o alle sottochiavi correlati. L'aggiornamento si verifica all'inizializzazione della casella degli strumenti, quando il riquadro attività della casella degli strumenti viene visualizzato per la prima volta, in genere all'avvio di Visual Studio o al caricamento di un progetto.

Per forzare un aggiornamento della cache della casella degli strumenti, specificare una nuova chiave o un nuovo valore nella chiave Toolbox. La modalità consigliata per questa operazione consiste nella creazione di una sottochiave Servicing che contiene quindi un valore di registrazione per ogni aggiornamento installato. L'aggiornamento della cache è destinato solo ai controlli che si trovano nella cartella di appartenenza specifica della chiave Toolbox, non a tutti i controlli del framework. È possibile che le personalizzazioni della casella degli strumenti dell'utente per i controlli di una cartella dell'assembly vadano perse quando viene aggiornata la cartella dell'assembly.

Vedere anche

Riferimenti

ToolboxBrowsableAttribute

ProvideMetadataAttribute

Altre risorse

Informazioni sull'estensibilità Progettazione WPF

Concetti di base sulla estensibilità

Aggiunta di metadati della fase di progettazione