解析C#项目结构

5895 更新于: 2021-05-24 读完约需 10 分钟

前言

我们在前面已创建了第一个C#控制台应用程序,并且也成功运行了。但是这个程序的结构和源代码基本都是Visual Studio自动生成的,我们基本没有手写多少自己的代码。

我们对这个项目的结构、文件目录以及解决方案这些都还不了解,本节的主要内容便是和大家一起了解和熟悉一下C#解决方案/项目的文件、目录结构以及解决方案在本地磁盘上是如何分类并存储的。

Visual Studio中如何管理和使用解决方案/项目

首先还是回到Visual Studio IDE中,打开”解决方案资源管理器”,可以看到一个菜单树结构的面板。这个面板列出了当前打开的解决方案中项目以及包含资源的目录树形结构。

最上面的节点是以解决方案的名称命名的。接着便列出了当前解决方案包含的项目,由于我们创建的是一个简单的示例程序,所以这里只有一个项目(ConsoleApp1)。分别打开”Properties”和”引用”,均分别包含了不同的文件。这些文件都是由Visual Studio在创建项目的时候自动生成的。

“Properties”中的AssemblyInfo.cs文件存储了当前项目的程序集信息,你可以双击打开这个文件查看,但在不熟悉之前,最好不要随意修改其中的内容。

“引用”则是列出了整个项目引入的需要的程序集。(什么是程序集?在这里不做过多详细介绍。)

对于Program.cs文件,我们可以双击它,Visual Studio会在编辑区域打开这个文件的源代码,以便编辑。就是我们刚创建项目时候看到的那个文件了。同时,也会在编辑区域上面选项卡中添加并选中当前正在编辑的文件,你也可以点击关闭按钮(“x”)将其关闭。

在本地文件夹中的存储结构

以上是解决方案/项目在Visual Studio中的呈现形式和管理使用方法,那么这个项目在本地的磁盘上又是如何存储的呢?

右键单击”解决方案资源管理器” 中的解决方案名称(这里是:解决方案”ConsoleApp1”,请注意,是右击解决方案,不是项目。),然后在弹出的菜单中选择 “在文件资源管理器中打开文件夹”,Visual Studio会自动打开并激活一个”文件资源管理器”,同时定位到当前解决方案所在的本地磁盘位置,由于我们在创建项目的时候使用的默认存储位置,所以当前解决方案的目录为:/xxx/source/repos/ConsoleApp1/

其中的xxx表示当前登录的Windows用户名称。

每个Visual Studio版本的默认解决方案路径可能不大一致,这并不影响正常使用,Visual Studio会正确找到解决方案的存储位置。

ConsoleApp1.sln

目录中有一个以扩展名.sln命名的 ConsoleApp1.sln文件,微软称其为”解决方案方案”文件,双击这个解决方案文件,只要本机安装了Visual Studio,便可打开。

这个ConsoleApp1.sln解决方案文件实际上一个配置文件,我们使用记事本打开它。

可以看到,其中保存了这个解决方案的一些配置数据,比如说Visual Studio的版本号,支持的最低Visual Studio版本号,解决方案包含的项目和项目的路径,以及解决方案的全局配置数据等等。

注: 请不要随意修改这些配置数据,否则在你不熟悉的情况,可能导致解决方案不能正常启动。

项目文件夹(ConsoleApp1)

在解决方案同级的目录中,还有一个名为ConsoleApp1的文件夹,这个文件夹叫做项目文件夹,为了保持整个解决方案的项目结构清晰,也为了方便管理,建议每个项目都放在一个单独的文件夹中。

我们双击,进入ConsoleApp1这个项目文件夹。

其中存放了包含但不限于:binobjProperties三个子文件夹以及App.configConsoleApp1.csprojProgram.cs三个文件,下面我们一一介绍。

Program.cs

Program.cs文件是这个C#控制台应用程序的核心文件,因为这个程序就这个一.cs文件,程序所有的源代码都存储在这个文件里。

C#语言约定:所有C#的文件均以.cs为扩展名,文件名称可以任意指定,但建议最好文件名和其中的类名保持一致。

我们可以将Program.cs的名称修改成其他的任意字符,只要符合Windows操作系统的命名规范,比如修改为:Demo.cs。但如果在非Visual Studio中修改了文件名,可能导致Visual Studio解决方案找不到原来的文件,所以还得手动去添加这个修改后的Demo.cs到解决方案的项目中(Visual Studio中演示)。
当然,我们也可以直接在Visual Studio中修改这个文件的名称(Visual Studio中演示)。

ConsoleApp1.csproj

ConsoleApp1.csproj是一个项目的配置文件,也是由Visual Studio创建项目时根据用户配置自动生成的。同样的,使用记事本打开,实际上是一个XML文件,其中记录了与这个项目有关的相关数据和信息,例如程序的版本信息,包含的文件,引用的命名空间,生成文件的类型和位置等。

注:在初学阶段,请不要随意改动此文件中的数据。

bin文件夹

bin文件夹是用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。

在bin\debug\目录中有两个文件,除了要生成的.exe或.dll文件外,还有个.pdb文件,这个.pdb文件中就记录了代码中的断点等调试信息。一般移植或者打包程序只需要Debug文件即可,里面包含.exe文件、.dll文件、.ini文件、.xml文件、.pdb文件、.lib文件、.config、.manifest文件、.png文件、.gif文件、.cur文件、自定义文件夹等。
在\bin\release\目录下只有一个.exe或.dll文件,Release模式下不包含调试信息,并对代码进行了优化。

在Release 模式下,如果不需要生成.pdb文件,需要设置项目属性:

Project → Properties → Build → Advanced → Debug Info

obj文件夹

obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。

注: bin和obj文件夹是可以随意删除的,重新编译项目后又会自动生成这两个文件夹。

可执行文件

进入文件夹: bin\Debug\,会看到这些文件:ConsoleApp1.exeConsoleApp1.exe.configConsoleApp1.pdb

  • ConsoleApp1.exe: 是一个可执行文件,在之前我们已经执行过了,双击可以直接运行这个文件。
  • ConsoleApp1.exe.config:应用程序的配置文件,上面介绍的App.config文件的克隆。
  • ConsoleApp1.pdb:.pdb(Program Database File,程序数据库文件),是VS编译链接时生成的文件。DPB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB文件是在Debug模式下才会生成。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

发表评论

登录用户才能发表评论, 请 登 录 或者 注册