Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozwiązanie to struktura organizowania projektów w programie Visual Studio. Rozwiązanie obsługuje informacje o stanie projektów w dwóch plikach:
.slnplik (oparty na tekście, udostępniony).suofile (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 preSolutionplik , Projecti 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 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 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 GlobalSectionetykietą , 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
.slni przetwarza wszystkie sekcje oznaczone jakopreSolution. W tym przykładowym pliku istnieje jedna taka instrukcja:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = ReleaseGdy ś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
QueryInterfacepakiet 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żdejpreSolutionsekcji.Ś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}" EndProjectTa 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
.slnprojektu 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
.slnwszystkich sekcji pliku rozwiązanie jest wyświetlane w Eksploratorze 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.