什么是.sln和.vcproj文件,它们包含什么?

gee*_*eek 31 visual-studio

我是Visual Studio世界的新手.有人可以解释一下这两个文件包含的内容吗?我知道其中一个包含有关项目的信息,但另一个呢?

C J*_*son 56

项目文件(.vcproj/.vcxproj)包含有关如何将代码编译为DLL或二进制文件的设置,或者链接器可以组合到一个单元中的其他设置.项目文件只是一个包含编译器设置,链接器设置的xml文件,并描述了要编译的文件.

解决方案文件是将多个项目文件组合在一起的文本文件.

所以,如果你把它想象成一棵树,那么你就可以像这样对它进行良好的心理描绘:

.sln
   .vcproj
      .h
      .h
      .cpp
      .cpp
   .vcxproj
      .h
      .h
      .cpp
      .cpp
   .csproj
      .cs
Run Code Online (Sandbox Code Playgroud)

  • `*.vcxproj`是Visual Studio 2010及更高版本.`*.vcproj`是Visual Studio 2008及以下版本.Visual Studio {2005 | 2008}解决方案如何包含Visual Studio 2010项目文件?另请参阅MSDN上的[Build System Changes](https://msdn.microsoft.com/en-us/library/ee862524.aspx). (4认同)

Gra*_*mas 11

解决方案文件和项目文件采用XML格式,描述项目的各个部分及其关系,配置等.实际上,这两个文件都只是MSBuild脚本(当您猜对了,构建项目时,它们通过MSBuild运行.)

这意味着如果需要,它们易于手动操作(虽然这应该是一种罕见的情况),并且还允许向构建脚本添加自定义部件,为MSBuild创建可包含解决方案文件的自定义构建脚本,以及其他方面,或者只是简单的自动构建脚本,将解决方案文件(或项目)传递给MSBuild,例如,在版本控制签入时.

解决方案文件和项目文件之间的区别在于项目文件包含特定于项目的信息,而不知道其解决方案(但是,Visual Studio将在一定程度上查找层次结构,以便在打开项目时找到相关解决方案,如果一个存在); 解决方案文件知道属于解决方案的所有项目并引用它们中的每一个(例如文件目录,如果您愿意,但有项目),它还包含可适用的解决方案范围的信息/配置解决方案中的所有项目.

正如Hans Passant所指出的,有一个例外:VS2010之前的C++项目文件不是XML MSBuild文件,而是Microsoft在MSDN上记录格式.

  • .vcproj文件不是msbuild脚本.直到VS2010的.vcxproj (2认同)
  • 我知道这是一个旧线程但是...... SLN文件不是XML格式.是的,它是一个文本文件,但文件中没有XML元素. (2认同)

bes*_*osu 7

简而言之:一个用于解决方案,另一个用于项目,解决方案可以包含多个项目.


小智 7

.vcproj文件包含有关如何将源代码编译到目标(主要是可执行文件)的信息.在许多情况下,使项目文件成功编译至关重要,因此不要删除它.它可以与.dsp文件(Visual Studio 6),.prj文件(Borland编译器)或Makefile(Unix,GNU编译器)进行比较,并包含路径和编译器/链接器命令行选项.

.sln文件只是多个.vcproj文件的集合.由于Visual Studio可以自动创建一个(如果不存在),因此无需保留它以进行分发或归档.它是.dsw文件(Visual Studio 6)的继承者.它的名称"解决方案文件"是恕我直言,误导.

  • 解决方案文件包含手动配置的项目间构建依赖关系树,因此您不想删除涵盖多个项目的解决方案文件。 (2认同)