http://stackoverflow.com/questions/707107/parsing-visual-studio-solution-files
The .NET 4.0 version of the Microsoft.Build assembly
contains a SolutionParser class in the Microsoft.Build.Construction namespace
that parses Visual Studio solution files.
Можно определить операционную систему.
Идея в том, чтобы в скрипте msbuild определить операционную систему, на которой выполняется сборка и
в зависимости от этого определить #define MONO
тогда проектам было бы достаточно только заинклюдить этот скрипт
fact is that the solution file pretty much magically becomes a MSBuild file when MSBuild executes it
-- which is what happens when you build the solution in visual studio.
http://stackoverflow.com/questions/28196339/how-can-csproj-know-about-its-solution
Variables $(SolutionDir), $(SolutionPath), $(SolutionExt), etc, only defined when you build your .sln file, they are not defined when you build project directly.
VS 2005 - https://msdn.microsoft.com/en-us/library/bb165951(v=vs.80).aspx
VS 2015 - https://msdn.microsoft.com/en-us/library/bb165951(v=vs.140).aspx
http://stackoverflow.com/questions/2472183/replace-sln-with-msbuild-and-wrap-contained-projects-into-targets
http://www.jayway.com/2015/03/13/visual-studio-how-to-create-a-solution-template-with-multiple-projects/
https://msdn.microsoft.com/en-us/library/bb165922.aspx
A solution is a grouping of one or more projects that work together to create an application.
The project and status information that pertain to the solution are stored in two solution files,
a text-based solution (.sln) file and a binary solution user option (.suo) file.
https://msdn.microsoft.com/en-us/library/bb165327.aspx
When a solution is opened, the following process takes place.
The environment reads the solution.
If the environment finds a CLSID, it loads the corresponding VSPackage.
If a VSPackage is loaded, the environment calls QueryInterface for IVsPackage interface, for the interface that the VSPackage requires.
When reading from an .sln file, the environment calls QueryInterface for IVsPersistSolutionProps.
When reading from an .suo file, the environment calls QueryInterface for IVsPersistSolutionOpts.
https://msdn.microsoft.com/ru-ru/library/bb165951(v=vs.80).aspx
Only the .sln file contains entries in the preSolution and postSolution sections.
There are no similar sections in the .suo file since the solution needs this information to load properly.
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
https://msdn.microsoft.com/ru-ru/library/bb166499(v=vs.80).aspx
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.
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.
GlobalSection(SolutionProperties) = preSolution
http://www.windowsdevcenter.com/pub/a/dotnet/excerpt/vshacks_chap1/?page=4
Visual Studio 2005 includes an additional section that is not present
in any of the older versions of Visual Studio;
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
If the FALSE is switched to TRUE, then the solution node is hidden in
the IDE.
http://goobbe.com/questions/8104536/visual-studios-sln-file-solutionproperties-or-performance
I believe HideSolutionNode is true by default, until you add a second project to the solution (at least with vs2010 and probably 2012.)
http://www.nivisec.com/2008/09/vsts-projects-have-recently-been-added.html
I also managed to fix our "Some of the properties associated with the solution could not be read."
error as well by removing a "GlobalSection(SolutionProperties) = preSolution" section that had no projects listed in it.
Как вынести конфигурации в отдельный файл
http://stackoverflow.com/questions/5596329/visual-studio-2010-cannot-load-a-project-where-the-projectconfiguration-elemen
IDE
http://superuser.com/questions/255690/how-do-i-differentiate-between-2-different-solutions-of-the-same-name-in-visual
RDT
When the solution is opened in Visual Studio, an entry is made for the solution file (Solution1.sln) in the running document table (RDT).
If an element of the project is opened for editing, there is an entry for the project file in the RDT.
.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.