VS2013 解决方案文件结构分析

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:保存在本地的项目路径

VS 解决方案文件结构分析的更多相关文章

  1. VS2013 解决方案文件结构分析

    http://www.cnblogs.com/haogj/p/4248030.html Visual Studio 的解决方案文件是一个文本文件,其中的内容不是太复杂,有些时候 Visual Stud ...

  2. PNG文件结构分析 ---Png解析

    PNG文件结构分析 ---Png解析   为了实现更高级的应用,我们必须充分挖掘PNG的潜力. PNG的文件结构 根据PNG文件的定义来说,其文件头位置总是由位固定的字节来描述的:   十进制数 13 ...

  3. VS2015如何另存解决方案文件-修改解决方案sln文件的路径

    原文:VS2005如何另存解决方案文件-修改解决方案sln文件的路径 修改解决方案sln文件的路径 方法一:工具→选项→项目和解决方案,可设置项目的默认保存位置.方法二:"解决方案资源管理器 ...

  4. VS之解决方案文件夹

    Visual Studio提供了一种特殊的文件夹,它可以帮助组织大型解决方案.它们的名称也恰如其分,叫做“解决方案文件夹”. 注意   解决方案文件夹是解决方案资源管理器中的一种组织工具,创建这样的文 ...

  5. PNG文件结构分析

    http://blog.163.com/iwait2012@126/blog/static/16947232820124411174877/ PNG文件结构分析 对于一个PNG文件来说,其文件头总是由 ...

  6. vs解决方案文件出错

    问题描述: 电脑死机,重启电脑后打开解决方案,提示“选择的文件不是有效的解决方案文件” 解决方案: 1. 先用记事本打开这个解决方案查看下,发现其中内容变成空白了? 2. 打开项目中的xxxx.vcx ...

  7. 批处理清除VisualStudio解决方案文件夹

         有很多次我们需要手工来删除bin, obj这样的文件夹.这些文件夹是由Visual Studio编译项目时生成的,其中包括了当前项目的程序集.一个解决方案会包含好多个项目了,那么就有很多这样 ...

  8. win10 uwp 访问解决方案文件

    本文讲如何访问解决方案的资源. 我们经常会把一些图片资源放在我们的解决方案,那么从这里拿出来很简单. 我在 Assets 放了图片 1.jpg 那么我要把他拿出来可以 <Image Source ...

  9. vs2010打不开vs2017的.sln文件,出现错误提示 “选择的文件是解决方案文件 但是用此应用程序的较新版本创建的,无法打开”

    解决方案: 1.复制下面这段语句 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 2. ...

随机推荐

  1. 「LuoguP1144」 最短路计数(dijkstra

    题目描述 给出一个NN个顶点MM条边的无向无权图,顶点编号为1-N1−N.问从顶点11开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含22个正整数N,MN,M,为图的顶点数与边 ...

  2. 洛谷P3252 [JLOI2012]树

    题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...

  3. pytorch------cpu与gpu load时相互转化 torch.load(map_location=)

    将gpu改为cpu时,遇到一个报错: RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is ...

  4. 数据结构与算法(2)----->字符串

    1. 字符串的一些特点 1.1  广泛性 (1)字符串可以看作是字符类型的数组----->所以可能会涉及排序+查找; (2)很多问题都可以转化为字符串类型的方法去解决; 需要注意的是:用java ...

  5. HDFS数据迁移目录到正确姿势

    添加了一块硬盘,原来的DataNode已经把原有的硬盘占满:怎么办,想要把旧有的数据迁移到新的硬盘上面: 1. 在CDH中修改目录(在HDFS组件中搜索.dir),本例中,新加的硬盘挂载在/data上 ...

  6. js函数定义参数个数和实际传入参数的对比

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...

  7. GPLT天梯赛 L2-022. 重排链表

    L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...

  8. Parallel类

    Parallel类是对线程很好的一个抽象.该类位于System.Threading.Tasks名称空间中,提供了数据和任务并行性. Parallel类定义了并行的for和foreach的静态方法.Pa ...

  9. 简单的GTK窗体搭建

    #include<gtk/gtk.h> //必须引用gtk/gtk.h这个头文件 2 int main(int argc,char *argv[]) //标准c语言主函数的声明 3 { 4 ...

  10. MySQL数据库基础详解(非原创)

    文章大纲 一.数据库简介二.Mysql数据库简介三.Mysql安装与服务启动(Windows版本)四.Mysql图形化工具五.Mysql存储引擎精讲六.Mysql数据类型介绍七.Mysql主要专业名称 ...