http://www.cnblogs.com/haogj/p/4248030.htmlhtml
Visual Studio 的解決方案文件是一個文本文件,其中的內容不是太複雜,有些時候 Visual Studio 會把這個文件搞亂,理解一下這個文件的結構,對咱們處理一些異常狀況有所幫助。服務器
# 表示註釋行ide
Microsoft Visual Studio Solution File:用來講明解決方案文件的版本號,12.00 說明是 VS2013 的解決方案文件。post
VisualStudioVersion:打開這個解決方案文件須要的 Visual Studio 版本號ui
MinimumVisualStudioVersion:可以打開這個解決方案的最低 Visual Studio 版本號。spa
下面是一個解決方案文件的示例。code
Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1
解決方案中包含若干個項目,每一個項目有一個 Project 的說明。orm
Project( 項目在解決方案中的編號=顯示名稱, 實際路徑, 項目惟一標識 )htm
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication22",
"ConsoleApplication22\ConsoleApplication22.csproj",
"{312AC167-D533-4A6C-B5F9-9CBA3280DDD8}" EndProject
項目惟一標識來自項目文件,在 ConsoleApplication22.csproj 文件中能夠找到以下說明。blog
<ProjectGuid>{312AC167-D533-4A6C-B5F9-9CBA3280DDD8}</ProjectGuid>
若是是解決方案文件夾, 則實際路徑與顯示名稱一致。
好比,在解決方案中建立了一個名爲 NewFolder1 的解決方案文件夾。
在解決方案文件中就會多出來一個特殊的 Project。
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewFolder1",
"NewFolder1",
"{86426712-B46D-4FBB-B5CD-28376414DD94}" EndProject
因此,咱們能夠理解爲何解決方案文件夾不能嵌套了。
若是咱們在解決方案文件夾中建立了一個項目。
項目的說明示例以下。
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary1",
"NewFolder1\ClassLibrary1\ClassLibrary1.csproj",
"{DD66205E-FEB8-42C5-BF26-55A48274E65C}" EndProject
那麼,在解決方案文件中中的 Global 節中,會多出來一個 GlobalSection(NestedProjects) = preSolution
GlobalSection(NestedProjects) = preSolution {DD66205E-FEB8-42C5-BF26-55A48274E65C} = {86426712-B46D-4FBB-B5CD-28376414DD94} EndGlobalSection
你會看到前面是項目的標識,等號的後面就是解決方案文件夾的標識。這個嵌套的 NestedProjects 用來講明使用解決方案文件夾組織的項目。
在全部 Project 說明以後,應該存在一個 Global 配置節
Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Debug|Any CPU.Build.0 = Debug|Any CPU {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Release|Any CPU.ActiveCfg = Release|Any CPU {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal
能夠看到有三個部分組成
整個解決方案的配置信息在 SolutionConfigurationPlatforms 中。
GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection
每一個項目的平臺配置信息在 ProjectConfigurationPlatforms 中。
GlobalSection(ProjectConfigurationPlatforms) = postSolution {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Debug|Any CPU.Build.0 = Debug|Any CPU {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Release|Any CPU.ActiveCfg = Release|Any CPU {312AC167-D533-4A6C-B5F9-9CBA3280DDD8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection
項目的屬性。
GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection
若是使用 TFS 來管理項目,在 Global 配置節中會多出來一個 GlobalSection(TeamFoundationVersionControl) = preSolution 的配置節。
須要注意的是,這個多出來的配置節只能有一個,有的時候 TFS 會錯誤的多添加若干個,這時候,在打開項目的時候,你應該會看到以下的提示信息。
注意解決方案中實際包含的項目數量,多出來的 TeamFoundationVersionControl 配置節中項目數量通常不對。通常來講,保留第一個,將其餘的刪除就能夠了。
下面是一個配置節的示例。
GlobalSection(TeamFoundationVersionControl) = preSolution SccNumberOfProjects = 25 SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} SccTeamFoundationServer = http://tfs.xxxxxxx.com:8080/tfs/xxxxxxx SccLocalPath0 = . SccProjectUniqueName1 = xxx\\yyy\\zzz.csproj SccProjectTopLevelParentUniqueName1 = ttt.sln SccProjectName1 = xxx/yyy SccLocalPath1 = xxx\\yyy EndGlobalSection
其中
SccNumberOfProjects 是說明在 TFS 管理之下共有多少個項目。
SccTeamFoundationServer:TFS 服務器的地址。
SccLocalPath0:源代碼管理器的本地目錄
具體解決方案中的項目再分別列出來,每一個項目佔 4 行。
SccProjectUniqueName1:項目的路徑
SccProjectTopLevelParentUniqueName1:就是解決方案的名稱
SccProjectName1:項目的名稱,注意已經包含了項目文件夾前綴
SccLocalPath1:保存在本地的項目路徑