Plik rozwiązania (.sln)
Rozwiązanie to struktura organizowania projektów w programie Visual Studio. Rozwiązanie obsługuje informacje o stanie projektów w dwóch plikach:
.sln
plik (oparty na tekście, udostępniony).suo
file (binarne, opcje rozwiązania specyficzne dla użytkownika)
Aby uzyskać więcej informacji na temat plików suo, zobacz Plik opcji użytkownika rozwiązania (suo).
Jeśli pakiet VSPackage jest ładowany z powodu przywołowywania do .sln
pliku, środowisko wywołuje polecenie ReadSolutionProps odczytu w .sln
pliku.
Plik .sln
zawiera informacje tekstowe używane przez środowisko do znajdowania i ładowania parametrów name-value dla utrwałych danych i projektu VSPackages, do których się odwołuje. Gdy użytkownik otworzy rozwiązanie, środowisko przechodzi przez preSolution
plik , Project
i postSolution
informacje .sln
w celu załadowania rozwiązania, projektów w rozwiązaniu i wszelkich trwałych informacji dołączonych do rozwiązania.
Plik każdego projektu zawiera dodatkowe informacje odczytywane przez środowisko w celu wypełnienia hierarchii elementami tego projektu. Trwałość danych hierarchii jest kontrolowana przez projekt. Dane nie są zwykle przechowywane w .sln
pliku, chociaż celowo można zapisywać informacje o projekcie w .sln
pliku, jeśli zdecydujesz się to zrobić. Aby uzyskać więcej informacji na temat trwałości, zobacz Project Persistence and Opening and Saving Project Items (Trwałość projektu i otwieranie i zapisywanie elementów projektu).
Nagłówek pliku
Nagłówek .sln
pliku wygląda następująco:
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
Definicje
Microsoft Visual Studio Solution File, Format Version 12.00
Nagłówek standardowy definiujący wersję formatu pliku.
# Visual Studio Version 16
Główna wersja programu Visual Studio, która (ostatnio) zapisała ten plik rozwiązania. Te informacje steruje numerem wersji w ikonie rozwiązania.
VisualStudioVersion = 16.0.28701.123
Pełna wersja programu Visual Studio, która (ostatnio) zapisała plik rozwiązania. Jeśli plik rozwiązania jest zapisywany przez nowszą wersję programu Visual Studio, która ma tę samą wersję główną. Ta wartość nie jest aktualizowana tak, aby zmniejszyć współczynnik zmian w pliku.
MinimumVisualStudioVersion = 10.0.40219.1
Minimalna (najstarsza) wersja programu Visual Studio, która może otworzyć ten plik rozwiązania.
Microsoft Visual Studio Solution File, Format Version 12.00
Nagłówek standardowy definiujący wersję formatu pliku.
# Visual Studio Version 17
Główna wersja programu Visual Studio, która (ostatnio) zapisała ten plik rozwiązania. Te informacje steruje numerem wersji w ikonie rozwiązania.
VisualStudioVersion = 17.2.32505.173
Pełna wersja programu Visual Studio, która (ostatnio) zapisała plik rozwiązania. Jeśli plik rozwiązania jest zapisywany przez nowszą wersję programu Visual Studio, która ma tę samą wersję główną. Ta wartość nie jest aktualizowana tak, aby zmniejszyć współczynnik zmian w pliku.
MinimumVisualStudioVersion = 10.0.40219.1
Minimalna (najstarsza) wersja programu Visual Studio, która może otworzyć ten plik rozwiązania.
Treść pliku
Treść .sln
pliku składa się z kilku sekcji oznaczonych GlobalSection
etykietą , w następujący sposób:
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
Aby załadować rozwiązanie, środowisko wykonuje następującą sekwencję zadań:
Środowisko odczytuje sekcję Global pliku
.sln
i przetwarza wszystkie sekcje oznaczone jakopreSolution
. W tym przykładowym pliku istnieje jedna taka instrukcja:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = Release
Gdy środowisko odczytuje tag, mapuje
GlobalSection('name')
nazwę na pakiet VSPackage przy użyciu rejestru. Nazwa klucza powinna istnieć w rejestrze w obszarze[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]
. Wartość domyślna kluczy to identyfikator GUID pakietu (REG_SZ) pakietu VSPackage, który zapisał wpisy.Środowisko ładuje pakiet VSPackage, wywołuje
QueryInterface
pakiet VSPackage dla interfejsu IVsPersistSolutionProps i wywołuje ReadSolutionProps metodę z danymi w sekcji, aby pakiet VSPackage mógł przechowywać dane. Środowisko powtarza ten proces dla każdejpreSolution
sekcji.Środowisko iteruje bloki trwałości projektu. W tym przypadku istnieje jeden projekt.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProject
Ta instrukcja zawiera unikatowy identyfikator GUID projektu i identyfikator GUID typu projektu. Te informacje są używane przez środowisko do znajdowania pliku projektu lub plików należących do rozwiązania oraz pakietu VSPackage wymaganego dla każdego projektu. Identyfikator GUID projektu jest przekazywany do IVsProjectFactory ładowania określonego pakietu VSPackage powiązanego z projektem, a następnie projekt jest ładowany przez pakiet VSPackage. W takim przypadku pakiet VSPackage załadowany dla tego projektu to Visual Basic.
Każdy projekt może utrwały unikatowy identyfikator wystąpienia projektu, aby można było uzyskać do niego dostęp zgodnie z potrzebami innych projektów w rozwiązaniu. Najlepiej, jeśli rozwiązanie i projekty są objęte kontrolą kodu źródłowego, ścieżka do projektu powinna być względna względem ścieżki rozwiązania. Po pierwszym załadowaniu rozwiązania pliki projektu nie mogą znajdować się na komputerze użytkownika. Dzięki plikowi projektu, który jest przechowywany na serwerze względem pliku rozwiązania, łatwiej jest znaleźć i skopiować plik projektu na maszynę użytkownika. Następnie kopiuje i ładuje pozostałe pliki potrzebne do wykonania projektu.
Na podstawie informacji zawartych w sekcji
.sln
projektu pliku środowisko ładuje każdy plik projektu. Sam projekt jest następnie odpowiedzialny za wypełnianie hierarchii projektu i ładowanie wszystkich zagnieżdżonych projektów.Po przetworzeniu
.sln
wszystkich sekcji pliku rozwiązanie jest wyświetlane w Eksplorator rozwiązań i jest gotowe do modyfikacji przez użytkownika.
Jeśli nie można załadować jakiegokolwiek projektu w rozwiązaniu, który implementuje pakiet VSPackage, OnProjectLoadFailure metoda jest wywoływana, a wszystkie projekty w rozwiązaniu ignorują zmiany, które mogły zostać wprowadzone podczas ładowania. W przypadku wszelkich błędów analizowania jak najwięcej informacji jest zachowywanych przy użyciu plików rozwiązania. Środowisko wyświetla okno dialogowe z ostrzeżeniem użytkownika, że rozwiązanie jest uszkodzone.
Po zapisaniu lub zamknięciu rozwiązania wywoływana QuerySaveSolutionProps jest metoda . Jest on przekazywany do hierarchii, aby sprawdzić, czy zmiany zostały wprowadzone w rozwiązaniu .sln
, które należy wprowadzić w pliku. Wartość null przekazywana do QuerySaveSolutionProps
elementu w systemie VSQUERYSAVESLNPROPSwskazuje, że informacje są utrwalane dla rozwiązania. Jeśli wartość nie ma wartości null, utrwalone informacje są przeznaczone dla określonego projektu określonego, określonego przez wskaźnik do interfejsu IVsHierarchy .
Jeśli istnieją informacje do zapisania, IVsSolutionPersistence interfejs jest wywoływany ze wskaźnikiem do SaveSolutionProps metody . WriteSolutionProps Następnie metoda jest wywoływana przez środowisko w celu pobrania par name-value z IPropertyBag
interfejsu i zapisania informacji do .sln
pliku.
SaveSolutionProps
obiekty i WriteSolutionProps
są wywoływane rekursywnie przez środowisko w celu pobrania informacji do zapisania z interfejsu IPropertyBag
.sln
do momentu wprowadzenia wszystkich zmian w pliku. W ten sposób można upewnić się, że informacje będą utrwalane w rozwiązaniu i dostępne przy następnym otwarciu rozwiązania.
Każdy załadowany pakiet VSPackage jest wyliczany, aby sprawdzić, czy ma coś do zapisania w .sln
pliku. Zapytania o klucze rejestru są tworzone tylko w czasie ładowania. Środowisko wie o wszystkich załadowanych pakietach, ponieważ są w pamięci w momencie zapisania rozwiązania.
.sln
Tylko plik zawiera wpisy w preSolution
sekcjach i postSolution
. W pliku .suo nie ma podobnych sekcji, ponieważ rozwiązanie wymaga poprawnego załadowania tych informacji. Plik .suo
zawiera opcje specyficzne dla użytkownika, takie jak notatki prywatne, które nie mają być udostępniane ani umieszczane w ramach kontroli kodu źródłowego.