Файл решений (SLN-файл)Solution (.Sln) File

Note

Эта статья относится к Visual Studio 2015.This article applies to Visual Studio 2015. Если вы ищете последние версии документации Visual Studio, используйте средство выбора версии в верхнем левом углу.If you're looking for the latest Visual Studio documentation, use the version selector at the top left. Мы рекомендуем выполнить обновление до Visual Studio 2019.We recommend upgrading to Visual Studio 2019. Скачать эту версию можно здесьDownload it here

Это решение представляет собой структуру для организации проектов в Visual Studio.A solution is a structure for organizing projects in Visual Studio. Решение хранит сведения о состоянии для проектов в SLN (текстовый, общие) и (решение двоичный, пользовательские параметры) SUO-файлы.The solution maintains the state information for projects in .sln (text-based, shared) and .suo (binary, user-specific solution options) files. Дополнительные сведения о SUO-файлы, см. в разделе пользовательских параметров решения (. SUO-) файл.For further information on .suo files, see Solution User Options (.Suo) File.

Если в результате, на которую ссылается SLN-файл загружается VSPackage, среда вызывает ReadSolutionProps для чтения в SLN-файл.If your VSPackage is loaded as a result of being referenced in the .sln file, the environment calls ReadSolutionProps to read in the .sln file.

SLN-файл содержит сведения, основанные на тексте, которые в среде используется для поиска и загрузки параметров имя значение для материализованных данных и пакеты VSPackage, он ссылается на проект.The .sln file contains text-based information the environment uses to find and load the name-value parameters for the persisted data and the project VSPackages it references. Когда пользователь открывает решение, среда выполняет циклический переход по preSolution, Project, и postSolution сведения в SLN-файл для загрузки решения, проекты в решении, и любой хранимой информации, к которым решение.When a user opens a solution, the environment cycles through the preSolution, Project, and postSolution information in the .sln file to load the solution, projects within the solution, and any persisted information attached to the solution.

Файл каждый проект содержит дополнительные сведения, полученные с помощью среды для заполнения иерархии с помощью элементов этого проекта.Each project's file contains additional information read by the environment to populate the hierarchy with that project's items. Сохраняемость данных иерархии управляется проекта; данные не хранятся обычно в SLN-файл, несмотря на то, что намеренно можно написать о проектах в SLN-файл, если вы решили сделать это.The hierarchy data persistence is controlled by the project; the data is not normally stored in the .sln file, although you can intentionally write project information to the .sln file if you choose to do so. Дополнительные сведения, относящиеся к сохраняемости, см. в разделе сохранение проекта и Открытие и сохранение элементов проекта.For more information relating to persistence, see Project Persistence and Opening and Saving Project Items.

Содержимое файла решенияSolution File Contents

SLN-файл состоит из нескольких разделов, как показано в следующем коде.The .sln file consists of several sections as illustrated in the following code.

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  

Чтобы загрузить решение, среде выполняет следующую последовательность задач.To load a solution, the environment performs the following sequence of tasks.

  1. Среде считывает общий раздел SLN-файла и обрабатывает все разделы, помеченные preSolution.The environment reads the Global section of the .sln file and processes all sections marked preSolution. В этом случае является одним из таких операторов:In this case, there is one such statement:

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

    Когда среде считывает GlobalSection('name') тег, он сопоставляет имя с VSPackage с помощью реестра.When the environment reads the GlobalSection('name') tag, it maps the name to a VSPackage using the registry. Имя ключа должна существовать в разделе реестра [HKLM\< корневой каталог приложения идентификатор реестра>\SolutionPersistence\AggregateGUIDs].The key name should exist in the registry under [HKLM\<Application ID Registry Root>\SolutionPersistence\AggregateGUIDs]. Параметры по умолчанию для ключей, используется идентификатор GUID пакета (REG_SZ) написал записи пакета VSPackage.The keys' default value is the Package GUID (REG_SZ) of the VSPackage that wrote the entries.

  2. Среде загружает VSPackage, вызовы QueryInterface в VSPackage для IVsPersistSolutionProps интерфейс, а также вызовы ReadSolutionProps метод с данными в разделе, поэтому данные можно сохранить пакет VSPackage.The environment loads the VSPackage, calls QueryInterface on the VSPackage for the IVsPersistSolutionProps interface, and calls the ReadSolutionProps method with the data in the section so the VSPackage can store the data. Среде этот процесс повторяется для каждого preSolution раздел.The environment repeats this process for each preSolution section.

  3. Среде выполняет итерацию в блоках сохраняемости проекта.The environment iterates through the project persistence blocks. В этом случае имеется один проект.In this case, there is one project.

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

    Эта инструкция содержит уникальный идентификатор GUID проекта и идентификатор GUID типа проекта.This statement contains the unique project GUID and the project type GUID. Эта информация используется в среде, чтобы найти файл проекта или файлов, принадлежащих к решению и VSPackage необходимые для каждого проекта.This information is used by the environment to find the project file or files belonging to the solution, and the VSPackage required for each project. Идентификатор GUID, переданный для проекта IVsProjectFactory загрузить определенный пакет VSPackage, связанные с проектом, затем проект загружен по VSPackage.The project GUID is passed to IVsProjectFactory to load the specific VSPackage related to the project, then the project is loaded by the VSPackage. В этом случае пакет VSPackage, который загружается для этого проекта — Visual Basic.In this case, the VSPackage that is loaded for this project is Visual Basic.

    Каждый проект можно сохранить проект уникальный идентификатор экземпляра, таким образом, чтобы он был доступен при необходимости, другие проекты в решении.Each project can persist a unique project instance ID so that it can be accessed as needed by other projects in the solution. В идеале Если решение и проекты находятся в системе управления версиями, путь к проекту, должны быть относительно пути к решению.Ideally, if the solution and projects are under source code control, the path to the project should be relative to the path to the solution. При первой загрузке решения, файлы проекта не может быть на компьютере пользователя.When the solution is first loaded, the project files cannot be on the user's machine. Когда файл проекта, хранящиеся на сервере по отношению к файлу решения, это относительно простой для файла проекта найти и скопировать на компьютере пользователя.By having the project file stored on the server relative to the solution file, it is relatively simple for the project file to be found and copied to the user's machine. А затем копирует и загружает остальные файлы, необходимые для проекта.It then copies and loads the rest of the files needed for the project.

  4. Среды, исходя из информации, содержащейся в разделе проекта SLN-файл, загружает каждый файл проекта.Based on the information contained in the project section of the .sln file, the environment loads each project file. Сам проект отвечает за заполнение иерархии проекта и загрузки всех вложенных проектов.The project itself is then responsible for populating the project hierarchy and loading any nested projects.

  5. После обработки всех разделов SLN-файла решение отображается в обозревателе решений и готов для изменения пользователем.After all sections of the .sln file are processed, the solution is displayed in Solution Explorer and is ready for modification by the user.

    Если не удается загрузить, любой пакет VSPackage, который реализует проект в решении OnProjectLoadFailure метод вызывается и получает возможность отменить изменения, его может сделать во время загрузки каждого проекта в решении.If any VSPackage that implements a project in the solution fails to load, the OnProjectLoadFailure method is called and every other project in the solution is given a chance to ignore changes it might have made during loading. В случае возникновения ошибки синтаксического анализа столько информации, максимально сохраняется с файлами решения и среде отображает диалоговое окно предупреждение о повреждении решения.If parsing errors occur, as much information as possible is preserved with the solution files and the environment displays a dialog box warning the user that the solution is corrupted.

    При сохранении или закрытии решения QuerySaveSolutionProps метод вызывается и передается в иерархию, чтобы увидеть, были ли внесены изменения в решение, которые должны быть введены в SLN-файл.When the solution is saved or closed, the QuerySaveSolutionProps method is called and passed to the hierarchy to see if changes have been made to the solution that need to be entered into the .sln file. Значение null, переданный для QuerySaveSolutionProps в VSQUERYSAVESLNPROPS, указывает что информация сохраняется для решения.A null value, passed in to QuerySaveSolutionProps in VSQUERYSAVESLNPROPS, indicates that information is being persisted for the solution. Если значение не равно null, сохраненной информации — для конкретного проекта, определяется указатель на IVsHierarchy интерфейс.If the value is not null, the persisted information is for a specific project, determined by the pointer to the IVsHierarchy interface.

    При наличии сведений для сохранения, IVsSolutionPersistence интерфейс вызывается с указателем на SaveSolutionProps метод.If there is information to be saved, the IVsSolutionPersistence interface is called with a pointer to the SaveSolutionProps method. WriteSolutionProps Метод вызывается средой, чтобы получить пары «имя значение» из IPropertyBag интерфейса и записывать данные в SLN-файл.The WriteSolutionProps method is then called by the environment to retrieve the name-value pairs from IPropertyBag interface and write the information to the .sln file.

    SaveSolutionProps и WriteSolutionProps объекты называются рекурсивно средой, чтобы получить сведения, которые будут сохраняться с IPropertyBag интерфейс, пока все изменения были введены в SLN-файл.SaveSolutionProps and WriteSolutionProps objects are called recursively by the environment to retrieve information to be saved from the IPropertyBag interface until all changes have been entered into the .sln file. Таким образом можно гарантировать, что данные будут сохранены с помощью решения и доступных следующий раз при открытии решения.In this way, you can insure that the information will be persisted with the solution and available next time the solution is opened.

    Чтобы увидеть, если у него есть действий, которые необходимо сохранить в SLN-файл перечисляется каждого загруженного пакета VSPackage.Every loaded VSPackage is enumerated to see if it has anything to save to .sln file. Это только во время загрузки, который получат разделы реестра.It is only at load time that the registry keys are queried. Среды было известно обо всех загруженных пакетов, так как они находятся в памяти во время сохранения решения.The environment knows about all of the loaded packages because they are in memory at the time the solution is saved.

    Только в SLN-файл содержит записи в preSolution и postSolution разделы.Only the .sln file contains entries in the preSolution and postSolution sections. Существуют аналогичные ни один из разделов в SUO-файл так, как решение использует эту информацию для загружаться неправильно.There are no similar sections in the .suo file since the solution needs this information to load properly. SUO-файл содержит пользовательские параметры, такие как частных заметок, которые не предназначены для общих или поместить в систему управления версиями.The .suo file contains user-specific options, such as private notes, that are not intended to be shared or placed under source code control.

См. такжеSee Also

IVsPersistSolutionProps
Пользовательских параметров решения (. SUO-) файл Solution User Options (.Suo) File
РешенияSolutions