VS2013 解决方案文件结构分析
http://www.cnblogs.com/haogj/p/4248030.html
Visual Studio 的解决方案文件是一个文本文件,其中的内容不是太复杂,有些时候 Visual Studio 会把这个文件搞乱,理解一下这个文件的结构,对我们处理一些异常情况有所帮助。
# 表示注释行
版本信息
Microsoft Visual Studio Solution File:用来说明解决方案文件的版本号,12.00 说明是 VS2013 的解决方案文件。
VisualStudioVersion:打开这个解决方案文件需要的 Visual Studio 版本号
MinimumVisualStudioVersion:能够打开这个解决方案的最低 Visual Studio 版本号。
下面是一个解决方案文件的示例。
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
项目
解决方案中包含若干个项目,每个项目有一个 Project 的说明。
Project( 项目在解决方案中的编号=显示名称, 实际路径, 项目唯一标识 )
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication22",
"ConsoleApplication22\ConsoleApplication22.csproj",
"{312AC167-D533-4A6C-B5F9-9CBA3280DDD8}"
EndProject
项目唯一标识来自项目文件,在 ConsoleApplication22.csproj 文件中可以找到如下说明。
<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:保存在本地的项目路径
VS2013 解决方案文件结构分析的更多相关文章
- VS 解决方案文件结构分析
VS2013 解决方案文件结构分析 Visual Studio 的解决方案文件是一个文本文件,其中的内容不是太复杂,有些时候 Visual Studio 会把这个文件搞乱,理解一下这个文件的结构,对我 ...
- PNG文件结构分析 ---Png解析
PNG文件结构分析 ---Png解析 为了实现更高级的应用,我们必须充分挖掘PNG的潜力. PNG的文件结构 根据PNG文件的定义来说,其文件头位置总是由位固定的字节来描述的: 十进制数 13 ...
- VS2015如何另存解决方案文件-修改解决方案sln文件的路径
原文:VS2005如何另存解决方案文件-修改解决方案sln文件的路径 修改解决方案sln文件的路径 方法一:工具→选项→项目和解决方案,可设置项目的默认保存位置.方法二:"解决方案资源管理器 ...
- VS之解决方案文件夹
Visual Studio提供了一种特殊的文件夹,它可以帮助组织大型解决方案.它们的名称也恰如其分,叫做“解决方案文件夹”. 注意 解决方案文件夹是解决方案资源管理器中的一种组织工具,创建这样的文 ...
- PNG文件结构分析
http://blog.163.com/iwait2012@126/blog/static/16947232820124411174877/ PNG文件结构分析 对于一个PNG文件来说,其文件头总是由 ...
- vs解决方案文件出错
问题描述: 电脑死机,重启电脑后打开解决方案,提示“选择的文件不是有效的解决方案文件” 解决方案: 1. 先用记事本打开这个解决方案查看下,发现其中内容变成空白了? 2. 打开项目中的xxxx.vcx ...
- Vs2013 头文件注释
在vs2013的默认安装目录 1.CS类修改方式 在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTempla ...
- 批处理清除VisualStudio解决方案文件夹
有很多次我们需要手工来删除bin, obj这样的文件夹.这些文件夹是由Visual Studio编译项目时生成的,其中包括了当前项目的程序集.一个解决方案会包含好多个项目了,那么就有很多这样 ...
- VS2013 添加文件头部注释模板
在看视频的时候发现,视频中每次新建一个类文件 都会自动生成一串 头部的注释:
随机推荐
- livequery源码解读
从使用说起: 若干年前,有一天发现,通过js代码创建的html元素及ajax加载的html,无法被$([selector]).click(function(){...})绑定上事件,于是发现了jQue ...
- ASP.NET中的KRE是什么?
KRE的英文全称是K Runtime Environment,其中K是ASP.NET vNext(后来叫ASP.NET 5)的项目代号. KRE是ASP.NET 5运行时环境,它是ASP.NET 5的 ...
- 微软BI 之SSIS 系列 - ETL 转换时关于 Code Page (1252 and 936) 转换错误的原因和解决方法
开篇介绍 最近经常碰到在 ETL 练习中出现这种转换失败的问题,试了多种方式,同样的代码同样的源结构和表结构但是一直不能成功执行,包报错.一般有这么几种错误: Error at DST_LOAD_DA ...
- 【WPF】提高InkAnalyer手写汉字识别的准确率
最近项目中需要用到一个手写键盘,我们使用了WPF的InkCanvas+InkAnalyer来开发. 按照文档,一般的代码写法如下: var analyzer = new InkAnalyzer(); ...
- mongodb(一) NoSQL简介
NoSQL简介 写在前面,本文就是学习的记录笔记,大部分内容都属于参考,分享给大家 关系与非关系数据库 那么应该了解下影响关系数据库性能的主要原因: 在关系型数据库中,导致性能欠佳的最主 ...
- javascript高级程序设计阅读笔记(一)
javascript高级程序设计阅读笔记(一) 工作之余开发些web应用作为兴趣,在交互方面需要掌握javascript和css.HTML5等技术,因此读书笔记是必要的. javascript简介 J ...
- Java程序员的日常 —— 工作一天的收获
看题目可能是扯皮,其实还是有很多专业知识的.从最开始没有注意到设计原则,到后面的jquery实战技巧,都是今天一天碰到的问题. 每天整理一点点,每天收获一点点. 关于软件设计 在设计系统结构的时候,一 ...
- Zabbix学习笔记一:基本安装与配置
1.下载安装 http://120.52.73.43/tenet.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.0.1/za ...
- DOM操作(Window.document对象)
间隔与延迟: 间隔一段代码: window.setInterval("代码",间隔执行秒数) 延迟一段时间后执行一段代码: window.setTimeout("执行代码 ...
- zookeeper 安装与配置
(1) 下载ZooKeeper,建议选择稳定版,即stable的. [root@bonnie1 ~]# cd /usr/local [root@bonnie1 local]# wget http:// ...