1. sln文件格式

使用记事本打开.sln文件,

从一个外行角度看,VC/VS有3种版本号,具备一定的迷惑性:(xx表示具体的数字)

MSVC++ xx(VC版本 eg. VC6.0)

_MSC_VER

VisualStudio xx(VS版本 eg. VS2012)

对照关系整理如下(更新至2022.11.9):

VC 版本 _MSC_VER VS 版本 MSVC toolset version

VC6.0 1200 VS 6.0

VC7.0 1300 VS2002

VC7.1 1310 VS2003

VC8.0 1400 VS2005 80

VC9.0 1500 VS2008 90

VC10.0 1600 VS2010 100

VC11.0 1700 VS2012 110

VC12.0 1800 VS2013 120

VC14.0 1900 VS2015 140

VC15.0 [1910,1916] VS2017 141

VC16.0 [1920,1929] VS2019 142

VC17.0 [1930,) VS2022 143

2. 解决方案(fangan.sln)文件

解决方案就是Visual Studio中用来组织项目的结构。.sln文件包含基于文本编写的信息,可用ultraedit打开,编译环境通过这些信息找到并且加载他引用到的持久数据和VSPackages项目。当用户打开解决方案的时候编译环境通过包含在.sln文件中的preSolution,Project,postSolution信息加载解决方案,包含在解决方案中的项目以及任何和解决方案有联系的持久信息。

3.文件版本(运行平台信息)

Microsoft Visual Studio Solution File, Format Version 12.00 #Visual Studio 14 VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1

4.工程信息(包含的项目信息)

Project(“{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}”) = “ssyy1”, “ssyy1\ssyy1.vcxproj”, “{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}” EndProject Project(“{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}”) = “ssyy2”, “ssyy2\ssyy2.vcxproj”, “{4773F960-EFEC-4C69-B583-671A3237EE72}” EndProject 项目全局唯一标识符(GUID)以及项目类型的全局唯一标识符(GUID) 前面的"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"是项目类型全局统一标识符,项目的全局唯一标识符(GUID)被传递到IVsProjectFactory用来加载和项目有关的特殊的VSPackage,然后这个项目被载入。在上面的代码中被载入的VSPackage是Windows (Visual C++) ,因为我们创建的两个项目ssyy1、ssyy2都是Visual C++项目。

后面的"{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}"是项目实例全局唯一标识符,用于在该解决方案中标识该项目的唯一性。每个项目中都存在一个唯一的项目实例ID,只有这样这个项目才能被其他解决方案中需要他的项目使用。理想状态下,如果解决方案和项目在源代码控制之下,项目的路径应该和解决方案的路径是相关的。当解决方案被第一次加载时,项目文件不能够存在于用户的电脑中。将项目文件存放在和解决方案文件相关的服务文件中,通过这个方法将相对简单的找到项目文件或者将项目文件复制到用户的电脑中。然后编译环境复制并加载剩下的项目所需文件。

GUID是确定的值:

部分VS项目GUID罗列如下:

Windows (C#) {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

Windows (VB.NET) {F184B08F-C81C-45F6-A57F-5ABD9991F28F}

Windows (Visual C++) {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}

Web Application {349C5851-65DF-11DA-9384-00065B846F21}

Web Site {E24C65DC-7377-472B-9ABA-BC803B73C61A}

WCF {3D9AD99F-2412-4246-B90B-4EAA41C64699}

WPF {60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}

XNA (Windows) {6D335F3A-9D43-41b4-9D22-F6F17C4BE596}

XNA (XBox) {2DF5C3F4-5A5F-47a9-8E94-23B4456F55E2}

XNA (Zune) {D399B71A-8929-442a-A9AC-8BEC78BB2433}

Silverlight {A1591282-1198-4647-A2B1-27E5FF5F6F3B}

ASP.NET MVC {F85E285D-A4E0-4152-9332-AB1D724D3325}

ASP.NET MVC 4 {E3E379DF-F4C6-4180-9B81-6769533ABE47}

Test {3AC096D0-A1C2-E12C-1390-A8335801FDAB}

Solution Folder {2150E333-8FDC-42A3-9474-1A3956D46DE8}

5…全局设置(全局变量)

Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x64.ActiveCfg = Debug|x64 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x64.Build.0 = Debug|x64 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x86.ActiveCfg = Debug|Win32 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x86.Build.0 = Debug|Win32 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x64.ActiveCfg = Release|x64 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x64.Build.0 = Release|x64 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x86.ActiveCfg = Release|Win32 {D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x86.Build.0 = Release|Win32 {4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x64.ActiveCfg = Debug|x64 {4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x64.Build.0 = Debug|x64 {4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x86.ActiveCfg = Debug|Win32 {4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x86.Build.0 = Debug|Win32 {4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x64.ActiveCfg = Release|x64 {4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x64.Build.0 = Release|x64 {4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x86.ActiveCfg = Release|Win32 {4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal

preSolution和postSolution分别是在solution启动前启动后执行的操作。

6.fangan.VC.db

用vs2015创建Visual C++项目,编写生成后,每次都会生成一个project_name.VC.db文件,而且会随着你工程修改运行变的越来越大。

project_name.VC.db是sqlite后端用于百intellisense的新数据库,度相当于之前的*.sdf SQL Server Compact数据库。它与VS2015提供的智能感知、代码恢复、团队本地仓库内功能有关,VS重新加载解决方案时速度超快。如果不需要,可以禁止,就不会产生该文容件了。

如果你不想生成该文件或不需要生成该文件的话可以通过以下方式取消: 设置方法:工具–》选项–》文本编辑器–》C/C++–》高级,把回退位置和警告设置为true或者禁用数据库设为true,这样就不会产生那个文件了。

7.XXX.vcxproj

vcxproj是工程的配置文件问,管理工程中细节比如包含的文件,引用库等。一般没有sln,也答可以专直接打开vcxproj,也可以重新生成sln。

*.vcproj:VS2008以及VS2008之前版本的VS工程文件

*.vcxproj:VS2010以及VS2010之后版本的VS工程文件

8. XXX.vcxproj.filters

*.vcxproj.filters就是用于项目下文件的虚拟目录,不能丢弃。可理解为视图文件,定义了工程在VS中打开后的目录结构,修改该文件后重新build时vs不会重新build工程。vcxproj.filters文件是过滤信息文件,解决方案中的筛选器文件就保存在此文件中。

vcxproj.user是本地化用户配置,允许多个用户使用自己喜好的方式配置这个项目(例如打开项目时候窗体位置等与项目内容无关的配置), 不需要添加到版本控制中。

在解决方案目录下的是最终文件(即可执行文件)存放的目录,在工程目录下的是中间文件(编译生成的.obj等其他文件)存放的目录,中间文件对用户来说没什么用的,只是在链接成最终文件时有用到。Debug只是为调试人员存在的。

9. XXX_main.obj文件

由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。有几个cpp就生成几个obj文件,单独编译的,之间没有联系。因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以这个obj目录的作用就是保存这些小块的编译结果,加快编译速度。

10.XXX.log文件

日志记录文件,是文本内容。

10.XXX.Build.CppClean.log

当点击“重新生成解决方案”的时候会有,否则没有。

10.XXX.tlog文件夹

相关记录文件,比如编译时候用到的库的头文件等;

10.XXX.pdb

是存放代码中断点等调试信息的,程序的pdb既是输出文件又是输入文件,因为LINK在重新构建程序时更新pdb。

10.XXX.idb

是记录了哪些文件是修改过的,需要重新编译的。

10.XXX.pch

是预编译头文件,存放工程中较稳定的代码。

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: