Fichier de solution (.sln)
Une solution est une structure permettant d’organiser des projets dans Visual Studio. La solution gère les informations d’état des projets dans deux fichiers :
.sln
fichier (texte, partagé).suo
fichier (options de solution spécifiques à l’utilisateur, binaires)
Pour plus d’informations sur les fichiers .suo, consultez Le fichier Options utilisateur de solution (.suo).
Si votre VSPackage est chargé en raison d’être référencé dans le .sln
fichier, l’environnement appelle ReadSolutionProps à lire le .sln
fichier.
Le .sln
fichier contient des informations textuelles que l’environnement utilise pour rechercher et charger les paramètres nom-valeur pour les données persistantes et le projet VSPackages qu’il référence. Lorsqu’un utilisateur ouvre une solution, l’environnement passe par le preSolution
fichier , Project
et postSolution
les informations dans le .sln
fichier pour charger la solution, les projets au sein de la solution et toutes les informations persistantes attachées à la solution.
Le fichier de chaque projet contient des informations supplémentaires lues par l’environnement pour remplir la hiérarchie avec les éléments de ce projet. La persistance des données de hiérarchie est contrôlée par le projet. Les données ne sont normalement pas stockées dans le .sln
fichier, bien que vous puissiez écrire intentionnellement des informations de projet dans le .sln
fichier si vous choisissez de le faire. Pour plus d’informations sur la persistance, consultez Persistance du projet et ouverture et enregistrement d’éléments de projet.
En-tête de fichier
L’en-tête d’un .sln
fichier ressemble à ceci :
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
Définitions
Microsoft Visual Studio Solution File, Format Version 12.00
En-tête standard qui définit la version du format de fichier.
# Visual Studio Version 16
La version principale de Visual Studio qui (récemment) a enregistré ce fichier de solution. Ces informations contrôlent le numéro de version dans l’icône de solution.
VisualStudioVersion = 16.0.28701.123
Version complète de Visual Studio qui (la plus récemment) a enregistré le fichier de solution. Si le fichier de solution est enregistré par une version plus récente de Visual Studio qui a la même version principale. Cette valeur n’est pas mise à jour afin de réduire l’activité dans le fichier.
MinimumVisualStudioVersion = 10.0.40219.1
Version minimale (la plus ancienne) de Visual Studio qui peut ouvrir ce fichier de solution.
Microsoft Visual Studio Solution File, Format Version 12.00
En-tête standard qui définit la version du format de fichier.
# Visual Studio Version 17
La version principale de Visual Studio qui (récemment) a enregistré ce fichier de solution. Ces informations contrôlent le numéro de version dans l’icône de solution.
VisualStudioVersion = 17.2.32505.173
Version complète de Visual Studio qui (la plus récemment) a enregistré le fichier de solution. Si le fichier de solution est enregistré par une version plus récente de Visual Studio qui a la même version principale. Cette valeur n’est pas mise à jour afin de réduire l’activité dans le fichier.
MinimumVisualStudioVersion = 10.0.40219.1
Version minimale (la plus ancienne) de Visual Studio qui peut ouvrir ce fichier de solution.
Corps du fichier
Le corps d’un .sln
fichier se compose de plusieurs sections étiquetées GlobalSection
, comme suit :
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
Pour charger une solution, l’environnement effectue la séquence de tâches suivante :
L’environnement lit la section Globale du
.sln
fichier et traite toutes les sections marquéespreSolution
. Dans cet exemple de fichier, il existe une instruction de ce type :GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = Release
Lorsque l’environnement lit la
GlobalSection('name')
balise, il mappe le nom à un VSPackage à l’aide du Registre. Le nom de clé doit exister dans le Registre sous[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]
. La valeur par défaut des clés est le GUID de package (REG_SZ) du VSPackage qui a écrit les entrées.L’environnement charge vsPackage, appelle
QueryInterface
vsPackage pour l’interface IVsPersistSolutionProps et appelle la ReadSolutionProps méthode avec les données de la section afin que VSPackage puisse stocker les données. L’environnement répète ce processus pour chaquepreSolution
section.L’environnement effectue une itération au sein des blocs de persistance du projet. Dans ce cas, il y a un projet.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProject
Cette instruction contient le GUID de projet unique et le GUID de type de projet. Ces informations sont utilisées par l’environnement pour rechercher le fichier projet ou les fichiers appartenant à la solution, ainsi que le VSPackage requis pour chaque projet. Le GUID du projet est passé pour IVsProjectFactory charger le VSPackage spécifique lié au projet, puis le projet est chargé par VSPackage. Dans ce cas, le VSPackage chargé pour ce projet est Visual Basic.
Chaque projet peut conserver un ID d’instance de projet unique afin qu’il soit accessible en fonction des besoins d’autres projets de la solution. Dans l’idéal, si la solution et les projets sont sous contrôle de code source, le chemin d’accès au projet doit être relatif au chemin de la solution. Lorsque la solution est chargée pour la première fois, les fichiers projet ne peuvent pas se trouver sur l’ordinateur de l’utilisateur. En ayant le fichier projet stocké sur le serveur par rapport au fichier solution, il est plus simple que le fichier projet soit trouvé et copié sur l’ordinateur de l’utilisateur. Il copie et charge ensuite le reste des fichiers nécessaires pour le projet.
En fonction des informations contenues dans la section projet du
.sln
fichier, l’environnement charge chaque fichier projet. Le projet lui-même est ensuite chargé de remplir la hiérarchie de projet et de charger tous les projets imbriqués.Une fois que toutes les sections du
.sln
fichier sont traitées, la solution s’affiche dans Explorateur de solutions et est prête à être modifiée par l’utilisateur.
Si un projet dans la solution qui implémente VSPackage ne parvient pas à se charger, la OnProjectLoadFailure méthode est appelée et tous les projets de la solution ignorent les modifications qu’elle a apportées pendant le chargement. Pour toutes les erreurs d’analyse, autant d’informations que possible sont conservées avec les fichiers de solution. L’environnement affiche une boîte de dialogue indiquant à l’utilisateur que la solution est endommagée.
Lorsque la solution est enregistrée ou fermée, la QuerySaveSolutionProps méthode est appelée. Il est passé à la hiérarchie pour voir si des modifications ont été apportées à la solution qui doivent être entrées dans le .sln
fichier. Une valeur Null, transmise à QuerySaveSolutionProps
in VSQUERYSAVESLNPROPS, indique que les informations sont conservées pour la solution. Si la valeur n’est pas null, les informations persistantes concernent un projet spécifique, déterminée par le pointeur vers l’interface IVsHierarchy .
S’il existe des informations à enregistrer, l’interface IVsSolutionPersistence est appelée avec un pointeur vers la SaveSolutionProps méthode. La WriteSolutionProps méthode est ensuite appelée par l’environnement pour récupérer les paires nom-valeur à partir de IPropertyBag
l’interface et écrire les informations dans le .sln
fichier.
SaveSolutionProps
et WriteSolutionProps
les objets sont appelés de manière récursive par l’environnement pour récupérer les informations à enregistrer à partir de l’interface IPropertyBag
jusqu’à ce que toutes les modifications aient été entrées dans le .sln
fichier. De cette façon, vous pouvez vous assurer que les informations seront conservées avec la solution et disponibles la prochaine fois que la solution est ouverte.
Chaque VSPackage chargé est énuméré pour voir s’il a quelque chose à enregistrer dans le .sln
fichier. Ce n’est qu’au moment du chargement que les clés de Registre sont interrogées. L’environnement connaît tous les packages chargés, car ils sont en mémoire au moment de l’enregistrement de la solution.
Seul le .sln
fichier contient des entrées dans les sections et postSolution
les preSolution
sections. Il n’existe aucune section similaire dans le fichier .suo, car la solution a besoin de ces informations pour charger correctement. Le .suo
fichier contient des options spécifiques à l’utilisateur, telles que des notes privées qui ne sont pas destinées à être partagées ou placées sous contrôle de code source.