File della soluzione (.sln)
Una soluzione è una struttura per organizzare i progetti in Visual Studio. La soluzione gestisce le informazioni sullo stato per i progetti in due file:
.sln
file (basato su testo, condiviso).suo
file (opzioni di soluzione binarie, specifiche dell'utente)
Per altre informazioni sui file con estensione suo, vedere File delle opzioni utente della soluzione (con estensione suo).
Se il pacchetto VSPackage viene caricato a causa di un riferimento nel .sln
file, l'ambiente chiama ReadSolutionProps per la lettura nel .sln
file.
Il .sln
file contiene informazioni basate su testo usate dall'ambiente per trovare e caricare i parametri name-value per i dati persistenti e il progetto VSPackages fa riferimento. Quando un utente apre una soluzione, l'ambiente scorre preSolution
le informazioni , Project
e postSolution
nel .sln
file per caricare la soluzione, i progetti all'interno della soluzione ed eventuali informazioni persistenti associate alla soluzione.
Il file di ogni progetto contiene informazioni aggiuntive lette dall'ambiente per popolare la gerarchia con gli elementi del progetto. La persistenza dei dati della gerarchia è controllata dal progetto. I dati non vengono normalmente archiviati nel .sln
file, anche se è possibile scrivere intenzionalmente informazioni sul progetto nel .sln
file se si sceglie di farlo. Per altre informazioni sulla persistenza, vedere Persistenza e apertura e salvataggio di elementi di progetto.
Intestazione file
L'intestazione di un .sln
file è simile alla seguente:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28701.123
MinimumVisualStudioVersion = 10.0.40219.1
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Definizioni
Microsoft Visual Studio Solution File, Format Version 12.00
Intestazione standard che definisce la versione del formato di file.
# Visual Studio Version 16
La versione principale di Visual Studio che (più di recente) ha salvato questo file di soluzione. Queste informazioni controllano il numero di versione nell'icona della soluzione.
VisualStudioVersion = 16.0.28701.123
Versione completa di Visual Studio che (più di recente) ha salvato il file della soluzione. Se il file della soluzione viene salvato da una versione più recente di Visual Studio con la stessa versione principale. Questo valore non viene aggiornato in modo da ridurre la varianza nel file.
MinimumVisualStudioVersion = 10.0.40219.1
Versione minima (meno recente) di Visual Studio in grado di aprire questo file di soluzione.
Microsoft Visual Studio Solution File, Format Version 12.00
Intestazione standard che definisce la versione del formato di file.
# Visual Studio Version 17
La versione principale di Visual Studio che (più di recente) ha salvato questo file di soluzione. Queste informazioni controllano il numero di versione nell'icona della soluzione.
VisualStudioVersion = 17.2.32505.173
Versione completa di Visual Studio che (più di recente) ha salvato il file della soluzione. Se il file della soluzione viene salvato da una versione più recente di Visual Studio con la stessa versione principale. Questo valore non viene aggiornato in modo da ridurre la varianza nel file.
MinimumVisualStudioVersion = 10.0.40219.1
Versione minima (meno recente) di Visual Studio in grado di aprire questo file di soluzione.
Corpo del file
Il corpo di un .sln
file è costituito da diverse sezioni con etichetta GlobalSection
, come illustrato di seguito:
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}"
EndProject
Global
GlobalSection(SolutionNotes) = postSolution
EndGlobalSection
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Debug.ActiveCfg = Debug|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Debug.Build.0 = Debug|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Release.ActiveCfg = Release|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Release.Build.0 = Release|x86
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
Per caricare una soluzione, l'ambiente esegue la sequenza di attività seguente:
L'ambiente legge la sezione Globale del
.sln
file ed elabora tutte le sezioni contrassegnate comepreSolution
. In questo file di esempio è presente un'istruzione di questo tipo:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = Release
Quando l'ambiente legge il tag, esegue il
GlobalSection('name')
mapping del nome a un VSPackage usando il Registro di sistema. Il nome della chiave deve esistere nel Registro di sistema in[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]
. Il valore predefinito delle chiavi è il GUID del pacchetto (REG_SZ) del VSPackage che ha scritto le voci.L'ambiente carica il VSPackage, chiama
QueryInterface
il VSPackage per l'interfaccia IVsPersistSolutionProps e chiama il ReadSolutionProps metodo con i dati nella sezione in modo che il VSPackage possa archiviare i dati. L'ambiente ripete questo processo per ognipreSolution
sezione.L'ambiente scorre i blocchi di persistenza del progetto. In questo caso, c'è un progetto.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProject
Questa istruzione contiene il GUID univoco del progetto e il GUID del tipo di progetto. Queste informazioni vengono usate dall'ambiente per trovare il file di progetto o i file appartenenti alla soluzione e il PACCHETTO VSPackage necessario per ogni progetto. Il GUID del progetto viene passato a IVsProjectFactory per caricare il VSPackage specifico correlato al progetto, quindi il progetto viene caricato dal VSPackage. In questo caso, il VSPackage caricato per questo progetto è Visual Basic.
Ogni progetto può rendere persistente un ID istanza di progetto univoco in modo che sia accessibile in base alle esigenze di altri progetti nella soluzione. Idealmente, se la soluzione e i progetti sono sotto il controllo del codice sorgente, il percorso del progetto deve essere relativo al percorso della soluzione. Quando la soluzione viene caricata per la prima volta, i file di progetto non possono trovarsi nel computer dell'utente. Avendo il file di progetto archiviato nel server relativo al file della soluzione, è più semplice trovare e copiare il file di progetto nel computer dell'utente. Quindi copia e carica il resto dei file necessari per il progetto.
In base alle informazioni contenute nella sezione del progetto del
.sln
file, l'ambiente carica ogni file di progetto. Il progetto stesso è quindi responsabile del popolamento della gerarchia del progetto e del caricamento di tutti i progetti annidati.Dopo l'elaborazione di tutte le sezioni del
.sln
file, la soluzione viene visualizzata in Esplora soluzioni ed è pronta per la modifica da parte dell'utente.
Se un progetto nella soluzione che implementa VSPackage non viene caricato, il OnProjectLoadFailure metodo viene chiamato e tutti i progetti nella soluzione ignorano le modifiche apportate durante il caricamento. Per eventuali errori di analisi, la maggior parte delle informazioni possibili viene mantenuta con i file della soluzione. L'ambiente visualizza una finestra di dialogo che avvisa l'utente che la soluzione è danneggiata.
Quando la soluzione viene salvata o chiusa, viene chiamato il QuerySaveSolutionProps metodo . Viene passato alla gerarchia per verificare se sono state apportate modifiche alla soluzione che devono essere immesse nel .sln
file. Un valore Null, passato a QuerySaveSolutionProps
in VSQUERYSAVESLNPROPS, indica che le informazioni vengono rese persistenti per la soluzione. Se il valore non è Null, le informazioni persistenti sono relative a un progetto specifico, determinate dal puntatore all'interfaccia IVsHierarchy .
Se sono presenti informazioni da salvare, l'interfaccia IVsSolutionPersistence viene chiamata con un puntatore al SaveSolutionProps metodo . Il WriteSolutionProps metodo viene quindi chiamato dall'ambiente per recuperare le coppie nome-valore dall'interfaccia IPropertyBag
e scrivere le informazioni nel .sln
file.
SaveSolutionProps
gli oggetti e WriteSolutionProps
vengono chiamati in modo ricorsivo dall'ambiente per recuperare le informazioni da salvare dall'interfaccia IPropertyBag
fino a quando non vengono immesse tutte le modifiche nel .sln
file. In questo modo, è possibile assicurarsi che le informazioni verranno mantenute con la soluzione e disponibili al successivo apertura della soluzione.
Ogni VSPackage caricato viene enumerato per verificare se contiene elementi da salvare nel .sln
file. È solo in fase di caricamento in cui vengono eseguite query sulle chiavi del Registro di sistema. L'ambiente conosce tutti i pacchetti caricati perché sono in memoria al momento del salvataggio della soluzione.
Solo il .sln
file contiene voci nelle preSolution
sezioni e postSolution
. Non sono presenti sezioni simili nel file con estensione suo perché la soluzione richiede che queste informazioni vengano caricate correttamente. Il .suo
file contiene opzioni specifiche dell'utente, ad esempio note private che non devono essere condivise o inserite nel controllo del codice sorgente.