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 |
|
|
ToolboxBrowsable = false |
|
|
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.
ControlLibrary.dll (assembly del controllo)
ControlLibrary.Design.<versione>.dll
Design\ControlLibrary.Design.<versione>.dll
ControlLibrary.[Expression|VisualStudio].Design.<versione>.dll
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
Altre risorse
Informazioni sull'estensibilità Progettazione WPF