作者:朱金灿

来源: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两种。

VS解决方案文件格式说明的更多相关文章

  1. WPF学习(9)样式和行为

    在asp.net世界中,我们的美工人员会为我们准备好静态页面,它注意包括三个部分:html.css和js.而在WPF世界里,也同样有着类似这三个部分的静态页面:Xaml.Style和Behaviors ...

  2. 如何在VS 2010中使用 VS2013的解决方案(转)

    今天要用VS2010打开VS2013,一直觉得VS2010到VS2012只是界面上扁平化的改变,平台工具集有改变但很大程度上可能向上兼容.在网上搜了一些文章,其中有一篇说到一个观点:        从 ...

  3. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  4. 转载文档:Storm实战常见问题及解决方案

    该文档为实实在在的原创文档,转载请注明: http://blog.sina.com.cn/s/blog_8c243ea30101k0k1.html 类型 详细 备注 该文档是群里几个朋友在storm实 ...

  5. C#下搭建文件格式转换服务器

    文件格式转换,相信很多涉及到office文档在线观看的都会需要,因为浏览器还不能完全支持直接打开office文档,所以很多情况下我们都需要将这些文档转换成flash能够播放的格式,但是另一个问题又来了 ...

  6. [转]Ionic + AngularJS angular-translate 国际化本地化解决方案

    本文转自:http://www.cnblogs.com/maoyazhi/p/4332362.html 欢迎访问我们的网站,网站上有更多关于技术性的交流:http://www.ncloud.hk/技术 ...

  7. 在VS 2010中使用 VS2013的解决方案

    本文转载自:http://blog.csdn.net/u011543589/article/details/25563351 今天要用VS2010打开VS2013,一直觉得VS2010到VS2012只 ...

  8. “System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本” 的解决方案

    在项目部署过程中ORACLE客户端多次会遇"System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本&qu ...

  9. asp.net输出docx文档出现【文件已损坏 无法打开】问题的解决方案

    在某个项目中,有个需求需要将一些附件文档以字节流的形式直接存储在数据库中. 功能实现后,尝试过很多格式文件的上传下载处理,均未发现问题, 唯独在下载docx格式文件后,一打开文件就提示: “无法打开文 ...

随机推荐

  1. 装饰模式和python装饰器

    装饰器和装饰模式 先给出两者的定义: - 装饰器:装饰器是一个非常著名的设计模式,常常被用于有切面需求的场景.较为经典的有插入日志.性能測试.事务处理等. 装饰器是解决这类问题的绝佳设计.有了装饰器, ...

  2. 对生产者和消费者问题的另一个解决办法是使用QWaitCondition(封装好了wakeOne,wakeAll,而且与QReadWriteLock对接,几乎是万能的办法)

    对生产者和消费者问题的另一个解决办法是使用QWaitCondition,它允许线程在一定条件下唤醒其他线程.其中wakeOne()函数在条件满足时随机唤醒一个等待线程,而wakeAll()函数则在条件 ...

  3. matplotlib学习之散点图与条形图

    # coding:utf-8 from matplotlib import pyplot as plt import numpy as np plt.style.use('ggplot') x = n ...

  4. HDU - 3078 Network(暴力+LCA)

    题目大意:给出n个点的权值.m条边,2种操作 0 u num,将第u个点的权值改成num k u v,询问u到v这条路上第k大的权值点 解题思路:该点的话直接该,找第k大的话直接暴力 #include ...

  5. iOS8下注冊push方式变更

    if (IOS8_) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UI ...

  6. php实现 坐标移动

    php实现  坐标移动 一.总结 一句话总结:伪代码,带函数逻辑,函数这样的方式写算法程序会节约超多的时间. 1.为什么算法题数据输入最好用多组数据输入的方式? 因为都是多组数据测试,而且多组数据输入 ...

  7. C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。

    C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...

  8. Android 长按事件和短按事件同时响应

    在长按事件中的return false 改为return true就可以解决这个问题

  9. Local database deployment problems and fixtures

    /*By Jiangong SUN*/ After encountering some problems in deploying databases to local server, here ar ...

  10. Qt 连接MySQL数据库(很多相关文章)

    今天想试试Qt如何连接数据库的. 谁知怎么写完了提示driver not loaded我就郁闷了. 我自己是 VS2010 + Qt4.8.4 + MySQL5.1 的环境 网上查到是 C:\Qt\4 ...