Lösungsdatei (.sln)
Eine Projektmappe ist eine Struktur zum Organisieren von Projekten in Visual Studio. Die Lösung Standard enthält die Statusinformationen für Projekte in zwei Dateien:
.sln
Datei (textbasiert, freigegeben).suo
Datei (binäre, benutzerspezifische Lösungsoptionen)
Weitere Informationen zu SUO-Dateien finden Sie unter Solution User Options (.suo) File.
Wenn Ihr VSPackage aufgrund des Verweises in der .sln
Datei geladen wird, ruft die Umgebung das Lesen in der .sln
Datei aufReadSolutionProps.
Die .sln
Datei enthält textbasierte Informationen, die die Umgebung zum Suchen und Laden der Namenswertparameter für die gespeicherten Daten verwendet, und das Projekt VSPackages verweist. Wenn ein Benutzer eine Lösung öffnet, wechselt die Umgebung durch die preSolution
Datei Project
und postSolution
die Informationen in der .sln
Datei, um die Lösung, Projekte in der Lösung und alle dauerhaften Informationen zu laden, die an die Lösung angefügt sind.
Die Datei jedes Projekts enthält zusätzliche Informationen, die von der Umgebung gelesen werden, um die Hierarchie mit den Elementen dieses Projekts aufzufüllen. Die Hierarchiedatenpersistenz wird vom Projekt gesteuert. Die Daten werden normalerweise nicht in der .sln
Datei gespeichert, obwohl Sie Projektinformationen absichtlich in die .sln
Datei schreiben können, wenn Sie dies tun. Weitere Informationen zur Persistenz finden Sie unter Projektpersistenz und Öffnen und Speichern von Projektelementen.
Dateiheader
Der Header einer .sln
Datei sieht wie folgt aus:
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
Definitionen
Microsoft Visual Studio Solution File, Format Version 12.00
Standardheader, der die Dateiformatversion definiert.
# Visual Studio Version 16
Die Hauptversion von Visual Studio, die (zuletzt) diese Lösungsdatei gespeichert hat. Diese Informationen steuern die Versionsnummer im Lösungssymbol.
VisualStudioVersion = 16.0.28701.123
Die Vollversion von Visual Studio, die (zuletzt) die Projektmappendatei gespeichert hat. Wenn die Lösungsdatei von einer neueren Version von Visual Studio gespeichert wird, die dieselbe Hauptversion aufweist. Dieser Wert wird nicht aktualisiert, sodass die Änderung in der Datei verringert wird.
MinimumVisualStudioVersion = 10.0.40219.1
Die minimale (älteste) Version von Visual Studio, die diese Lösungsdatei öffnen kann.
Microsoft Visual Studio Solution File, Format Version 12.00
Standardheader, der die Dateiformatversion definiert.
# Visual Studio Version 17
Die Hauptversion von Visual Studio, die (zuletzt) diese Lösungsdatei gespeichert hat. Diese Informationen steuern die Versionsnummer im Lösungssymbol.
VisualStudioVersion = 17.2.32505.173
Die Vollversion von Visual Studio, die (zuletzt) die Projektmappendatei gespeichert hat. Wenn die Lösungsdatei von einer neueren Version von Visual Studio gespeichert wird, die dieselbe Hauptversion aufweist. Dieser Wert wird nicht aktualisiert, sodass die Änderung in der Datei verringert wird.
MinimumVisualStudioVersion = 10.0.40219.1
Die minimale (älteste) Version von Visual Studio, die diese Lösungsdatei öffnen kann.
Dateitext
Der Textkörper einer .sln
Datei besteht aus mehreren Abschnitten, die wie folgt bezeichnet werden GlobalSection
:
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
Zum Laden einer Lösung führt die Umgebung die folgende Aufgabensequenz aus:
Die Umgebung liest den globalen Abschnitt der
.sln
Datei und verarbeitet alle markiertenpreSolution
Abschnitte. In dieser Beispieldatei gibt es eine solche Anweisung:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = Release
Wenn die Umgebung das
GlobalSection('name')
Tag liest, wird der Name einem VSPackage mithilfe der Registrierung zugeordnet. Der Schlüsselname sollte in der Registrierung unter[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]
. Der Standardwert der Schlüssel ist die Paket-GUID (REG_SZ) der VSPackage, die die Einträge geschrieben hat.Die Umgebung lädt vsPackage, ruft
QueryInterface
die VSPackage für die IVsPersistSolutionProps Schnittstelle auf und ruft die ReadSolutionProps Methode mit den Daten im Abschnitt auf, damit die VSPackage die Daten speichern kann. Die Umgebung wiederholt diesen Prozess für jedenpreSolution
Abschnitt.Die Umgebung durchläuft die Persistenzblöcke des Projekts. In diesem Fall gibt es ein Projekt.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProject
Diese Anweisung enthält die eindeutige Projekt-GUID und die Projekttyp-GUID. Diese Informationen werden von der Umgebung verwendet, um die Projektdatei oder -dateien zu finden, die zur Lösung gehören, und das für jedes Projekt erforderliche VSPackage. Die Projekt-GUID wird übergeben, um IVsProjectFactory das spezifische VSPackage-Projekt im Zusammenhang mit dem Projekt zu laden. Anschließend wird das Projekt vom VSPackage geladen. In diesem Fall ist das für dieses Projekt geladene VSPackage Visual Basic.
Jedes Projekt kann eine eindeutige Projektinstanz-ID beibehalten, sodass sie bei Bedarf von anderen Projekten in der Projektmappe aufgerufen werden kann. Im Idealfall sollte der Pfad zum Projekt relativ zum Pfad der Lösung relativ zum Pfad der Lösung sein, wenn die Projektmappe und Projekte unter Quellcodeverwaltung stehen. Wenn die Projektmappe zum ersten Mal geladen wird, können sich die Projektdateien nicht auf dem Computer des Benutzers befinden. Wenn die Projektdatei, die relativ zur Projektmappendatei auf dem Server gespeichert ist, ist es einfacher, dass die Projektdatei gefunden und auf den Computer des Benutzers kopiert wird. Anschließend werden die restlichen Dateien kopiert und geladen, die für das Projekt erforderlich sind.
Basierend auf den Informationen, die im Projektabschnitt der
.sln
Datei enthalten sind, lädt die Umgebung jede Projektdatei. Das Projekt selbst ist dann für das Auffüllen der Projekthierarchie und das Laden von geschachtelten Projekten verantwortlich.Nachdem alle Abschnitte der
.sln
Datei verarbeitet wurden, wird die Lösung in Projektmappen-Explorer angezeigt und kann vom Benutzer geändert werden.
Wenn ein Projekt in der Projektmappe, das VSPackage implementiert, nicht geladen werden kann, wird die OnProjectLoadFailure Methode aufgerufen, und alle Projekte in der Lösung ignorieren Änderungen, die sie beim Laden möglicherweise vorgenommen haben. Für alle Analysefehler werden so viele Informationen wie möglich mit den Lösungsdateien beibehalten. In der Umgebung wird ein Dialogfeld angezeigt, in dem der Benutzer gewarnt wird, dass die Lösung beschädigt ist.
Wenn die Lösung gespeichert oder geschlossen wird, wird die QuerySaveSolutionProps Methode aufgerufen. Es wird an die Hierarchie übergeben, um festzustellen, ob Änderungen an der Lösung vorgenommen wurden, die in die .sln
Datei eingegeben werden müssen. Ein NULL-Wert, der an QuerySaveSolutionProps
das In VSQUERYSAVESLNPROPSübergeben wird, gibt an, dass Informationen für die Lösung beibehalten werden. Wenn der Wert nicht NULL ist, sind die dauerhaften Informationen für ein bestimmtes Projekt bestimmt, das vom Zeiger auf die IVsHierarchy Schnittstelle bestimmt wird.
Wenn Informationen gespeichert werden sollen, wird die IVsSolutionPersistence Schnittstelle mit einem Zeiger auf die SaveSolutionProps Methode aufgerufen. Die WriteSolutionProps Methode wird dann von der Umgebung aufgerufen, um die Name-Wert-Paare aus der IPropertyBag
Schnittstelle abzurufen und die Informationen in die .sln
Datei zu schreiben.
SaveSolutionProps
und WriteSolutionProps
Objekte werden rekursiv von der Umgebung aufgerufen, um Informationen abzurufen, die von der IPropertyBag
Schnittstelle gespeichert werden sollen, bis alle Änderungen in die .sln
Datei eingegeben wurden. Auf diese Weise können Sie sicherstellen, dass die Informationen mit der Lösung beibehalten und beim nächsten Öffnen der Lösung verfügbar sind.
Jedes geladene VSPackage wird aufgezählt, um festzustellen, ob etwas zum Speichern in .sln
der Datei vorhanden ist. Die Registrierungsschlüssel werden nur beim Laden abgefragt. Die Umgebung kennt alle geladenen Pakete, da sie sich zum Zeitpunkt des Speicherns der Lösung im Arbeitsspeicher befinden.
Nur die .sln
Datei enthält Einträge in den preSolution
Und postSolution
Abschnitten. Es gibt keine ähnlichen Abschnitte in der SUO-Datei, da die Lösung diese Informationen benötigt, um ordnungsgemäß zu laden. Die .suo
Datei enthält benutzerspezifische Optionen wie private Notizen, die nicht freigegeben oder unter Quellcodeverwaltung platziert werden sollen.