VS2013 解決方案文件結構分析

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 用來講明使用解決方案文件夾組織的項目。

Global 配置節

在全部 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 配置節

若是使用 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:保存在本地的項目路徑

相關文章
相關標籤/搜索