Generazione di un nuovo progetto: dietro le quinte, parte 1
Hai mai pensato a come creare il tuo tipo di progetto? Ci si chiede cosa succede effettivamente quando si crea un nuovo progetto? Diamo un'occhiata sotto il cappuccio e vediamo cosa sta succedendo davvero.
Esistono diverse attività coordinate da Visual Studio:
Visualizza un albero di tutti i tipi di progetto disponibili.
Visualizza un elenco di modelli di applicazione per ogni tipo di progetto e consente di sceglierne uno.
Raccoglie informazioni sul progetto per l'applicazione, ad esempio il nome e il percorso del progetto.
Passa queste informazioni alla factory del progetto.
Genera elementi e cartelle del progetto nella soluzione corrente.
Finestra di dialogo Nuovo progetto
Tutto inizia quando si seleziona un tipo di progetto per un nuovo progetto. Per iniziare, fare clic su Nuovo progetto dal menu File . Viene visualizzata la finestra di dialogo Nuovo progetto , simile alla seguente:
Di seguito si spiegherà meglio questo concetto. L'albero Tipi di progetto elenca i vari tipi di progetto che è possibile creare. Quando si seleziona un tipo di progetto come Visual C# Windows, verrà visualizzato un elenco di modelli di applicazione per iniziare. I modelli installati da Visual Studio sono installati da Visual Studio e sono disponibili per qualsiasi utente del computer. I nuovi modelli creati o raccolti possono essere aggiunti ai modelli personali e sono disponibili solo per l'utente.
Quando si seleziona un modello come Applicazione Windows, viene visualizzata una descrizione del tipo di applicazione nella finestra di dialogo. In questo caso, un progetto per la creazione di un'applicazione con un'interfaccia utente di Windows.
Nella parte inferiore della finestra di dialogo Nuovo progetto verranno visualizzati diversi controlli che raccolgono altre informazioni. I controlli visualizzati dipendono dal tipo di progetto, ma in genere includono una casella di testo Nome progetto, una casella di testo Percorso e un pulsante Sfoglia correlato e una casella di testo Nome soluzione e una casella di controllo Crea directory per la soluzione correlata.
Popolamento della finestra di dialogo Nuovo progetto
Da dove viene recuperata la finestra di dialogo Nuovo progetto ? Ci sono due meccanismi al lavoro qui, uno di loro deprecato. La finestra di dialogo Nuovo progetto combina e visualizza le informazioni ottenute da entrambi i meccanismi.
Il metodo precedente (deprecato) usa le voci del Registro di sistema e i file con estensione vsdir. Questo meccanismo viene eseguito all'apertura di Visual Studio. Il metodo più recente usa file con estensione vstemplate. Questo meccanismo viene eseguito quando Visual Studio viene inizializzato, ad esempio eseguendo
devenv /setup
oppure
devenv /installvstemplates
Project Types (Tipi di progetto)
La posizione e i nomi dei nodi radice dei tipi di progetto, ad esempio Visual C# e Altri linguaggi, sono determinati dalle voci del Registro di sistema. L'organizzazione dei nodi figlio, ad esempio Database e Smart Device, rispecchia la gerarchia delle cartelle che contengono i file con estensione vstemplate corrispondenti. Esaminiamo prima i nodi radice.
Nodi radice del tipo di progetto
Quando Visual Studio viene inizializzato, attraversa le sottochiavi della chiave del Registro di sistema HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\NewProjectTemplates\TemplateDirs per compilare e denominare i nodi radice dell'albero dei tipi di progetto. Queste informazioni vengono memorizzate nella cache per un uso successivo. Esaminare la chiave TemplateDirs\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\/1. Ogni voce è un GUID VSPackage. Il nome della sottochiave (/1) viene ignorato, ma la sua presenza indica che si tratta di un nodo radice dei tipi di progetto. Un nodo radice può a sua volta avere diverse sottochiavi che ne controllano l'aspetto nell'albero Dei tipi di progetto. Diamo un'occhiata ad alcuni di loro.
(impostazione predefinita).
Si tratta dell'ID risorsa della stringa localizzata che assegna un nome al nodo radice. La risorsa stringa si trova nella DLL satellite selezionata dal GUID VSPackage.
Nell'esempio il GUID VSPackage è
{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}
e l'ID risorsa (valore predefinito) del nodo radice (/1) è #2345
Se si cerca il GUID nella chiave pacchetti nelle vicinanze ed esamina la sottochiave SatelliteDll, è possibile trovare il percorso dell'assembly che contiene la risorsa stringa:
<Percorso> di installazione di Visual Studio\VC#\VCSPackages\1033\csprojui.dll
Per verificarlo, aprire il Esplora file e trascinare csprojui.dll nella directory di Visual Studio. La tabella di stringhe mostra che la risorsa #2345 ha il didascalia Visual C#.
SortPriority
Ciò determina la posizione del nodo radice nell'albero Dei tipi di progetto.
REG_DWORD 0x00000014 SortPriority (20)
Minore è il numero della priorità, maggiore è la posizione nell'albero.
DeveloperActivity
Se questa sottochiave è presente, la posizione del nodo radice viene controllata dalla finestra di dialogo Sviluppo Impostazioni. ad esempio:
DeveloperActivity REG_SZ VC#
indica che Visual C# sarà un nodo radice se Visual Studio è impostato per lo sviluppo di Visual C++. In caso contrario, sarà un nodo figlio di Altre lingue.
Folder
Se questa sottochiave è presente, il nodo radice diventa un nodo figlio della cartella specificata. Sotto la chiave viene visualizzato un elenco di possibili cartelle
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\NewProjectTemplates\PseudoFolders
Ad esempio, la voce Progetti di database ha una chiave cartella che corrisponde alla voce Altri tipi di progetto in PseudoFolders. Quindi, nell'albero Tipi di progetto, i progetti di database saranno un nodo figlio di Altri tipi di progetto.
Nodi figlio del tipo di progetto e file con estensione vstdir
La posizione dei nodi figlio nell'albero Tipi di progetto segue la gerarchia delle cartelle nelle cartelle ProjectTemplates. Per i modelli di computer (modelli installati in Visual Studio), il percorso tipico è \Programmi\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\ e per i modelli utente (modelli personali), il percorso tipico è \Documenti\Visual Studio 14.0\Templates\ProjectTemplates\. Le gerarchie di cartelle di queste due posizioni vengono unite per creare l'albero dei tipi di progetto.
Per Visual Studio con le impostazioni per sviluppatori C#, l'albero dei tipi di progetto è simile al seguente:
La cartella ProjectTemplates corrispondente è simile alla seguente:
Quando si apre la finestra di dialogo Nuovo progetto , Visual Studio attraversa la cartella ProjectTemplates e ne ricrea la struttura nell'albero Dei tipi di progetto con alcune modifiche:
Il nodo radice nell'albero Dei tipi di progetto è determinato dal modello di applicazione.
Il nome del nodo può essere localizzato e può contenere caratteri speciali.
È possibile modificare l'ordinamento.
Ricerca del nodo radice per un tipo di progetto
Quando Visual Studio attraversa le cartelle ProjectTemplates, apre tutti i file ZIP ed estrae tutti i file con estensione vstemplate. Un file con estensione vstemplate usa XML per descrivere un modello di applicazione. Per altre informazioni, vedere New Project Generation: Under the Hood, Part Two.For more information, see New Project Generation: Under the Hood, Part Two.
Il <tag ProjectType> determina il tipo di progetto per l'applicazione. Ad esempio, il file \CSharp\SmartDevice\WindowsCE\1033\WindowsCE-EmptyProject.zip contiene un file EmptyProject.vstemplate con questo tag:
<ProjectType>CSharp</ProjectType>
Il <tag ProjectType> e non la sottocartella nella cartella ProjectTemplates determina il nodo radice di un'applicazione nell'albero Dei tipi di progetto. Nell'esempio le applicazioni Windows CE vengono visualizzate sotto il nodo radice di Visual C# e anche se si dovesse spostare la cartella WindowsCE nella cartella VisualBasic, le applicazioni Windows CE verranno ancora visualizzate sotto il nodo radice di Visual C# .
Localizzazione del nome del nodo
Quando Visual Studio attraversa le cartelle ProjectTemplates, esamina tutti i file con estensione vstdir trovati. Un file con estensione vstdir è un file XML che controlla l'aspetto del tipo di progetto nella finestra di dialogo Nuovo progetto . Nel file con estensione vstdir usare il <tag LocalizedName> per assegnare un nome al nodo Tipi di progetto.
Ad esempio, il file \CSharp\Database\TemplateIndex.vstdir contiene questo tag:
<LocalizedName Package="{462b036f-7349-4835-9e21-bec60e989b9c}" ID="4598"/>
Ciò determina la DLL satellite e l'ID risorsa della stringa localizzata che assegna un nome al nodo radice, in questo caso Database. Il nome localizzato può contenere caratteri speciali non disponibili per i nomi delle cartelle, ad esempio .NET.
Se non è presente alcun <tag LocalizedName>, il tipo di progetto viene denominato dalla cartella stessa, Smart Telefono 2003.
Ricerca dell'ordinamento per un tipo di progetto
Per determinare l'ordinamento del tipo di progetto, i file con estensione vstdir usano il <tag SortOrder> .
Ad esempio, il file \CSharp\Windows\Windows.vstdir contiene questo tag:
<SortOrder>5</SortOrder>
Il file \CSharp\Database\TemplateIndex.vstdir ha un tag con un valore maggiore:
<SortOrder>5000</SortOrder>
Minore è il numero nel <tag SortOrder> , maggiore è la posizione nell'albero, quindi il nodo Windows viene visualizzato più alto del nodo Database nell'albero Tipi di progetto.
Se non viene specificato alcun <tag SortOrder> per un tipo di progetto, viene visualizzato in ordine alfabetico seguendo tutti i tipi di progetto che contengono <specifiche SortOrder> .
Si noti che non sono presenti file con estensione vstdir nelle cartelle Documenti (Modelli personali). I nomi dei tipi di progetto dell'applicazione utente non vengono localizzati e vengono visualizzati in ordine alfabetico.
Una rapida revisione
Modificare la finestra di dialogo Nuovo progetto e creare un nuovo modello di progetto utente.
Aggiungere una sottocartella MyProjectNode alla cartella \Programmi\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp.
Creare un file MyProject.vstdir nella cartella MyProjectNode usando qualsiasi editor di testo.
Aggiungere queste righe al file con estensione vstdir:
<TemplateDir Version="1.0.0"> <SortOrder>6</SortOrder> </TemplateDir>
Salvare e chiudere il file con estensione vstdir.
Creare un file MyProject.vstemplate nella cartella MyProjectNode usando qualsiasi editor di testo.
Aggiungere queste righe al file con estensione vstemplate:
<VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <ProjectType>CSharp</ProjectType> </TemplateData> </VSTemplate>
Salvare il file con estensione vstemplate e chiudere l'editor.
Inviare il file con estensione vstemplate a una nuova cartella MyProjectNode\MyProject.zip compressa.
Nella finestra di comando di Visual Studio digitare:
devenv /installvstemplates
Aprire Visual Studio.
Aprire la finestra di dialogo Nuovo progetto ed espandere il nodo del progetto Visual C# .
MyProjectNode viene visualizzato come nodo figlio di Visual C# appena sotto il nodo Windows.