Soubor řešení (.sln)

Řešení je struktura pro uspořádání projektů v sadě Visual Studio. Řešení udržuje informace o stavu projektů ve dvou souborech:

  • .sln soubor (textový, sdílený)

  • .suo soubor (binární, možnosti řešení specifické pro uživatele)

Další informace o souborech .suo naleznete v tématu Možnosti uživatele řešení (.suo) Soubor.

Pokud je váš balíček VSPackage načten z důvodu odkazování v .sln souboru, volání ReadSolutionProps prostředí ke čtení v .sln souboru.

Soubor .sln obsahuje textové informace, které prostředí používá k vyhledání a načtení parametrů name-value pro trvalá data a projekt VSPackages odkazuje. Když uživatel otevře řešení, prostředí prochází souborem preSolutiona ProjectpostSolution informacemi v .sln souboru, aby se řešení načetlo, projekty v rámci řešení a všechny trvalé informace připojené k řešení.

Soubor každého projektu obsahuje další informace přečtené prostředím, aby se hierarchie naplnila položkami daného projektu. Trvalost dat hierarchie je řízena projektem. Data nejsou obvykle uložená v .sln souboru, ale pokud se tak rozhodnete, můžete do .sln souboru záměrně zapsat informace o projektu. Další informace o trvalosti naleznete v tématu Trvalost a otevírání a ukládání položek projektu.

Hlavička souboru

Hlavička .sln souboru vypadá takto:

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

Definice

Microsoft Visual Studio Solution File, Format Version 12.00
Standardní hlavička, která definuje verzi formátu souboru.

# Visual Studio Version 16
Hlavní verze sady Visual Studio, která (naposledy) uložila tento soubor řešení. Tyto informace řídí číslo verze v ikoně řešení.

VisualStudioVersion = 16.0.28701.123
Úplná verze sady Visual Studio, která (naposledy) uložila soubor řešení. Pokud soubor řešení uloží novější verze sady Visual Studio, která má stejnou hlavní verzi. Tato hodnota se neaktualizuje, aby se snížila četnost změn v souboru.

MinimumVisualStudioVersion = 10.0.40219.1
Minimální (nejstarší) verze sady Visual Studio, která může otevřít tento soubor řešení.

Microsoft Visual Studio Solution File, Format Version 12.00
Standardní hlavička, která definuje verzi formátu souboru.

# Visual Studio Version 17
Hlavní verze sady Visual Studio, která (naposledy) uložila tento soubor řešení. Tyto informace řídí číslo verze v ikoně řešení.

VisualStudioVersion = 17.2.32505.173
Úplná verze sady Visual Studio, která (naposledy) uložila soubor řešení. Pokud soubor řešení uloží novější verze sady Visual Studio, která má stejnou hlavní verzi. Tato hodnota se neaktualizuje, aby se snížila četnost změn v souboru.

MinimumVisualStudioVersion = 10.0.40219.1
Minimální (nejstarší) verze sady Visual Studio, která může otevřít tento soubor řešení.

Text souboru

Tělo .sln souboru se skládá z několika oddílů označených GlobalSectiontakto:

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

Pokud chcete načíst řešení, prostředí provede následující posloupnost úloh:

  1. Prostředí přečte globální oddíl .sln souboru a zpracuje všechny oddíly označené preSolution. V tomto příkladu souboru existuje jeden takový příkaz:

    GlobalSection(SolutionConfiguration) = preSolution
         ConfigName.0 = Debug
         ConfigName.1 = Release
    

    Když prostředí přečte GlobalSection('name') značku, mapuje název na balíček VSPackage pomocí registru. Název klíče by měl existovat v registru v části [HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]. Výchozí hodnota klíče je IDENTIFIKÁTOR GUID balíčku (REG_SZ) balíčku VSPackage, který zapisoval položky.

  2. Prostředí načte balíček VSPackage, zavolá QueryInterface balíček VSPackage pro IVsPersistSolutionProps rozhraní a zavolá metodu ReadSolutionProps s daty v oddílu, aby VSPackage mohl ukládat data. Prostředí tento proces opakuje pro každou preSolution část.

  3. Prostředí prochází bloky trvalosti projektu. V tomto případě je jeden projekt.

    Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1",
    "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}"
    EndProject
    

    Tento příkaz obsahuje jedinečný identifikátor GUID projektu a identifikátor GUID typu projektu. Tyto informace používá prostředí k vyhledání souboru projektu nebo souborů patřících do řešení a balíčku VSPackage vyžadovaného pro každý projekt. Identifikátor GUID projektu se předá pro IVsProjectFactory načtení konkrétního balíčku VSPackage souvisejícího s projektem a pak se projekt načte nástrojem VSPackage. V tomto případě je balíček VSPackage, který je načten pro tento projekt, Visual Basic.

    Každý projekt může zachovat jedinečné ID instance projektu, aby k němu bylo možné přistupovat podle potřeby jinými projekty v řešení. Pokud jsou řešení a projekty v ideálním případě pod správou zdrojového kódu, měla by být cesta k projektu relativní vzhledem k cestě řešení. Při prvním načtení řešení se soubory projektu na počítači uživatele nedají načíst. Díky tomu, že soubor projektu, který je uložený na serveru vzhledem k souboru řešení, je jednodušší soubor projektu najít a zkopírovat do počítače uživatele. Potom zkopíruje a načte zbývající soubory potřebné pro projekt.

  4. Na základě informací obsažených .sln v části projektu souboru prostředí načte každý soubor projektu. Samotný projekt pak zodpovídá za naplnění hierarchie projektu a načtení všech vnořených projektů.

  5. Po zpracování všech částí .sln souboru se řešení zobrazí v Průzkumník řešení a je připraveno k úpravám uživatelem.

Pokud se některému projektu v řešení, které implementuje balíček VSPackage, nepodaří se načíst, OnProjectLoadFailure volá se metoda a všechny projekty v řešení ignorují změny, které se mohly provést během načítání. U všech chyb analýzy se u souborů řešení zachová co nejvíce informací. Prostředí zobrazí dialogové okno s upozorněním uživatele, že řešení je poškozené.

Při uložení nebo zavření QuerySaveSolutionProps řešení se volá metoda. Předá se hierarchii, aby se zjistilo, jestli v řešení, které je potřeba zadat do .sln souboru, provedly změny. Hodnota null předaná do QuerySaveSolutionPropsVSQUERYSAVESLNPROPSsouboru in označuje, že informace se pro řešení uchovávají. Pokud hodnota není null, trvalé informace se týkají konkrétního projektu určeného ukazatelem na IVsHierarchy rozhraní.

Pokud je potřeba uložit informace, IVsSolutionPersistence volá se rozhraní s ukazatelem na metodu SaveSolutionProps . Metoda WriteSolutionProps je pak volána prostředím k načtení párů name-value z IPropertyBag rozhraní a zápisu informací do .sln souboru.

SaveSolutionProps a WriteSolutionProps objekty se nazývají rekurzivně prostředím, aby načetlo informace, které se mají uložit z IPropertyBag rozhraní, dokud se do .sln souboru nezadají všechny změny. Tímto způsobem můžete zajistit, aby informace zůstaly v řešení a byly k dispozici při příštím otevření řešení.

Každý načtený balíček VSPackage je výčet, aby se zjistilo, jestli má co uložit do .sln souboru. Je to jen v době načtení, kdy se na klíče registru dotazují. Prostředí ví o všech načtených balíčcích, protože jsou v paměti v době uložení řešení.

.sln Pouze soubor obsahuje položky v preSolution oddílech a postSolution oddílech. V souboru .suo nejsou žádné podobné oddíly, protože řešení tyto informace potřebuje k správnému načtení. Soubor .suo obsahuje možnosti specifické pro uživatele, jako jsou soukromé poznámky, které nejsou určeny ke sdílení nebo umístění do správy zdrojového kódu.