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两种。





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值