VS解决方案文件格式说明
作者:朱金灿
来源:http://blog.csdn.net/clever101
VS解决方案文件本质是一个文件文件,这个用记事本或者Node++之类的文本编辑软件打开一个VS解决方案文件就知道了。了解了这一点,我们知道使用c语言的文件操作函数就能读取VS解决方案文件了。下面是一个简单的读取函数:
#include "stdafx.h"
#include <tchar.h>
#include <string> int _tmain(int argc, _TCHAR* argv[])
{
std::wstring strSlnFile = _T("G:\\dev-utility-tools\\src\\dev-utility-tools.sln");
FILE* fp;
TCHAR szBuff[3*_MAX_PATH];// 设定读取缓冲区为*260 if( (fp = _tfopen(strSlnFile.c_str(),_T("r"))) != NULL )
{
memset(szBuff,'\0',_MAX_PATH*3*sizeof(TCHAR));
while(_fgetts( szBuff,_MAX_PATH*3*sizeof(TCHAR), fp ) )
{
_tprintf(_T("%s"),szBuff);
}
}
getchar();
return 0;
}
上述代码实现读取的是vs2008的解决方案文件,在win7旗舰版,vs 2008+sp1运行成功,效果图如下:
现在我们分析vs2008的解决方案文件存储的是什么信息?使用文本工具进行分析可以推断,我初步判断vs2008的解决方案文件可以划分为三部分:
第一部分为解决方案文件说明,第二部分为工程文件说明,以第一个Project开始,第三部分为工程平台设置,以Global开始,以EndGlobal结束。下面逐一作具体说明:
一个空的解决方案文件(即不包含任何工程)只有第一和第三部分,具体如下:
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
第一部分一般只有三行
第一行为空行
第二行为VS解决方案文件格式的版本说明,
如VS2008MicrosoftVisual Studio Solution File, Format Version 10.00
第三行为上一行的VS版本注释,如# Visual Studio 2008,可推断VS2005对应的解决方案文件版本为9.00
第二部分为工程说明,这里的工程分为源码工程和虚拟文件夹。
单个工程说明的格式为
Project("{工程类型标识}") = "工程名", "工程文件相对解决方案文件的位置", "{工程标识}"
ProjectSection(ProjectDependencies)= postProject # 所依赖的工程
所依赖工程1的标识 =所依赖工程1的标识
EndProjectSection
EndProject
若无依赖工程,则无ProjectSection(ProjectDependencies) = postProject这个部分。
在VS2008中,源码工程的标识为8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942,虚拟文件夹的标识为2150E333-8FDC-42A3-9474-1A3956D46DE8,貌似都是GUID。虚拟文件夹并无对应的工程文件,因此在位置一项中取其名字。
第三部分为工程平台设置。这里的工程平台设置分为两部分,一是解决方案配置,二是对应的解决方案平台,具体如下图:
从上图可知,所有的工程配置数等于解决方案配置数乘以解决方案平台。
这部分的具体说明如下:
Global # 开始符
# 列出解决方案所有的配置数
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
#指定每个工程的具体配置
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Debug|Win32.ActiveCfg = Debug|Win32
{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Debug|Win32.Build.0 = Debug|Win32
{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Release|Win32.ActiveCfg = Release|Win32
{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Release|Win32.Build.0 = Release|Win32
{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Debug|Win32.ActiveCfg = Debug|Win32
{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Debug|Win32.Build.0 = Debug|Win32
{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Release|Win32.ActiveCfg = Release|Win32
{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal # 结束符
上面值得注意的是每一种设置都分为ActiveCfg和Build.0两种。
最新文章
- MySQL SELECT执行顺序
- 如何用 freebayes call SNP
- JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架
- ubuntu FTP服务安装
- vs2005及以上版本的程序分发问题
- 封装sdk API 应用
- webstrom 编码
- J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析
- .Net Core:Middleware中间件管道
- Deno下一代Nodejs?Deno初体验
- Django 学习手册 - 下载数据库表格(XLS/CSV)
- ES6 扩展运算符 三个点(...)
- springboot项目新功能开发
- bzoj1001狼抓兔子
- Maven Web项目部署到Tomcat下问题
- C++ 开源库列表
- css的再深入4(更新中&#183;&#183;&#183;)
- 新项目的vue组件
- JDBC:随机生成车牌号,批量插入数据库
- Laravel5.1 与 Laypage 结合进行分页
热门文章
- 卫星网络中使用TCP协议的劣势(所以才有TCP优化版用来卫星通信啊,比如TCP-Peach和ADolar)
- vue配置路由
- Geodatabase模型
- [java面试]宇信易诚 广州分公司 java笔试题目回顾录
- MapReduce&;#160;图解流程
- [TypeStyle] Compose CSS classes using TypeStyle
- static,const,extern,以及全局常量
- php实现构建乘积数组(算法:替换)(语法错误:分号和$符号)
- 【34.88%】【codeforces 569C】Primes or Palindromes?
- Android菜鸟的成长笔记(25)——可爱的小闹钟