vs项目结构解析

当我们用VS开发一个项目的时候,首先应该清楚用VS这个IDE生成的一些文件和文件夹是什么意思,起什么作用,什么场合下使用。

因为我使用的是VS2015,就以这个为例来进行一些说明:

首先要做的是更改你的操作系统,把隐藏的文件、文件夹显示出来,以完整的显示VS在生成一个项目时的完整文件、文件夹结构。

1、首先看到的是.sln文件和隐藏的.suo文件(.vs/你的解决方案名/版本/.suo)

Net解决方案下 .sln文件和.suo文件的解释:

When a Web site is created, a solution file (.sln) and a hidden solution user options file (.suo) are created. By default, these files are created in the My Documents/Visual Studio 2005/Projects folder. bcoz they are not required in the deployed website.

SLN ( own's the following details):

    * A list of the projects that are to be loaded into Visual Studio 2005
    * A list of project dependencies
    * Microsoft Visual SourceSafe information
    * A list of add-ins that are available 

SUO ( own's the following files):

    * The task list
    * Debugger break points and watch window settings
    * Visual Studio window locations 

 

        Visual Studio采用两种文件类型(.sln和.suo)来存储特定于解决方案的设置,它们总称为解决方案文件。为解决方案资源管理器提供显示管理文件的图形接口所需的信息
从而在每次继续开发任务时,不会因开发环境而分散精力;

       *.sln:(Visual Studio Solution) 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等.

       ps:就是打开文件的索引,正确引导你进入环境,进入工程!


       *.suo: (solution user options) 解决方案用户选项记录所有将与解决方案建立关联的选项,
以便在每次打开时,它都包含您所做的自定义设置。比如VS布局,项目最后编译的而又没有关掉的文件(下次打开时用)
    

        ps:大概就是保存一些与代码本身无关的一些配置.


       *.suo 是一种文件的格式。它是很重要的文件,

       *.suo 解决方案用户选项,记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含用户所做的自定义设置。

       它储存了用户界面的自定义配置,包括布局、断点和项目最后编译的而又没有关掉的文件(下次打开时用)等,以便于下一次你打开Visual Studio可以恢复这些设置,因此不要随便删除,所以不要管它们。 其实上面英文中解释已经很清楚了,要申明的是PDB中不带断点信息.  

  其中,VS布局包括:监视器1234的变量列表、断点标记及开关状态、输出窗口错误窗口等的分布及其悬浮状态,还有项目卸载状态标记。 
  *.suo文件偶尔会被破坏,从而在构建和编辑应用程序时出现意想不到的结果。如果Visual Studio对于每个解决方案不稳定,就应删除.suo文件。下次打开解决方案时,Visual Studio会重建它。

总结:

sln和suo文件共同组成了解决方案的记录和配置,VS解决方案中各种配置都存在这里,具体的每一个细节就不一一列举,以上可以给大家一个整体的认识。
    但是你需要清楚一个事实,那就是,sln和suo只是一个记录解决方案的相关信息的,详细的项目信息,在其他的文件中,这两个文件只是起一个组织的作用,将各个信息凝聚在一起,从而形成一个解决方案,方便项目开发。我们也没有必要细细的研究每一个细节,只不过在此有了这个整体上的认识,大家知道平时使用VS的基本工作记录都存于此文件中。
    所以,也不要随意的删掉这个你看似没用的文件,删掉代码也不会丢失,但是,有时候环境配置好后,使用也比较方便,对于这两个文件,没必要动它。为了减少项目文件的大小,和这两个文件没有关系,但是如果操作不当,会导致解决方案打不开。那么解决办法就只有重建项目,然后导入代码文件了,只是会浪费一些时间而已,又要重新组织项目文件。
    这两个文件是很基本的,大小都不大,但是对于组织解决方案确实起了很大的作用,建议不要随意手动去更改,在VS中操作后自然会对文件修改。

 2、接下来应该是一个一个的项目,windows下是以一个文件夹表示一个项目。

  Form1.cs  Form1.Designer.cs  Program.cs

1. 创建 Windows 窗体项目时,默认情况下,C# 会将一个窗体添加到项目中,并为其命名为 Form1。表示该窗体的两个文件称为 Form1.cs 和 Form1.Designer.cs。Form1.cs 中写入的是你自己的代码;Designer.cs 文件是C# Windows 窗体设计器自动写入代码的文件,这些代码用于实现所有通过从“工具箱”中拖放控件执行的操作。

Designer.cs 文件包含将控件拖动到窗体、在“属性”窗口中设置属性等操作时“窗体设计器”写入的源代码。通常,根本不应该手动编辑此文件。 

2. 一但当你自己动手修改了Designer.cs 文件, 或者是你在学习时, 拷贝了别人的Designer.cs 文件, 反正只要你的Form设值只要有一点点对不上Designer.cs 文件, C#将不会执行Designer.cs 文件. 

这就导致你的提示InitializeComponent不存在,但是对应的Form1.Designer.cs中有该方法。 

解决办法是重做一个Form, 让VS重新生成Designer.cs 文件,除非你特别熟悉Designer.cs 文件与Form的关系。

Form1.cs和Form1.Designer.cs其实是一个类,Visual Studio为了让我们方便管理,用partial关键字把窗体类给拆开了,Form1.Designer.cs存放的是窗体的布局,
你的窗体定义了哪些控件,那些控件的名字、属性等等,都是存放在Form1.Designer.cs里面的,而Form1.cs则是用来存放处理方法的,
比如你的按钮点击事件绑定了Button_Click这个方法,就会出现在Form1.cs里
其实在早期版本的Visual Studio里,是没有Form1.Designer.cs的,窗体的设计类和逻辑类全在一个文件里。
那么好处就显而易见了:便于管理。让你编程的时候能够更加直观。

3.Program.cs是程序入口,也就是Main函数。 

3、.cs  .csproj  .resx

  .cs:C Sharp Source File

  Form1.csproj文件大家应该不会陌生,那就是C#项目文件的扩展名,它是“C Sharp Project”的缩写。那么它究竟是给谁用的呢?那是给开发工具用的,例如我们在熟悉不过的Visual Studio,以及大家可以没有接触过,但是应该都听说过的MSBuild.exe。Visual Studio会根据csproj里的XML定义来管理项目文件以及相关其他一些种类非常丰富的数据及操作,MSBuild也会根据csproj文件来得知编译这个项目需要有哪些依赖,默认输出路径,Pre-Build和Post-Build需要哪些操作等等。Visual Studio和MSBuild都是开发工具,这就是csproj存在的唯一意义:为“开发环境”提供信息。而到了运行环境中,根本不会有人(操作系统?)关心所谓的csproj文件——也就是“程序是哪里来的”。

  Form1.resx: (窗体资源文件)你在设计窗体时所嵌入的资源, 用来存放你的窗体资源的,比如你自定义了你的窗体的图标,这个图标就会出现在Form.resx里面。

4、bin文件夹  obj文件夹

Visual Studio 编译时,在bin 目录下有debug 和 release 目录

Debug: 通常称为调试版本,它包含调试信息,所以要比Release 版本大很多(可能大数百K或数M),并且不进行任何优化,便于程序员调试程序。

Release: 称为发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的,以便于用户很好的使用。

obj目录用于存放在编译过程中生成的中间临时文件,其中也都有debug 和 release 两个子目录, 分别对应调试版本和发行版本。在.NET中,编译是分模块进行的,每个模块的编译结果都保存在了Obj 目录下。最后会合并为一个.exe 或者  .dll 文件保存到 bin 之中。 因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以,这个Obj 目录的作用就是保存这些小块的编译结果,加快编译速度。 

一、先解释一下各个文件的作用:

.pdb文件:

程序数据库文件(Program Database File)。默认设置下,Debug的PDB是full,保存着调试和项目状态信息、有断点、堆栈检查等代码,可以对程序的调试配置进行增量链接。

而Release的默认设置对PDB指定为pdb-only,保存着程序出了什么错误,以及错误在哪行。

.vshost.exe文件:

宿主进程文件(VS host process),是Visual Studio 2005中的一项功能,主要是为了提高调试性能。 release时最好删除。

.vshost.exe.manifest 文件:

是一个以.manifest为后缀的XML文件,用于组织和描述隔离应用程序及并行组件,用于COM类、接口及库的绑定和激活,而这些信息,以往都是存储在注册表中的。

Manifests也制定了组成程序集的文件及Windows类,release 时也最好删除。

  二、不生成这些文件的方法:

  不生成.vshost.exe文件的方法

  如图,打开工程属性的debug标签页,将构成选为「Release」,去掉「Visual Studio Hosting Process有效」的勾选后保存。

  config-debug.pnguploading.4e448015.gif转存失败config-debug.pnguploading.4e448015.gif转存失败config-debug.pnguploading.4e448015.gif转存失败

  不生成.pdb文件的方法

  如图,打开工程属性的build标签页,将构成选为「Release」后打开「详细设定」。将 「输出」中的「Debug信息」从「pdb only」变为「none」后保存。  

  config-build.pnguploading.4e448015.gif转存失败config-build.pnguploading.4e448015.gif转存失败config-build.pnguploading.4e448015.gif转存失败

  config-build-advanced.pnguploading.4e448015.gif转存失败config-build-advanced.pnguploading.4e448015.gif转存失败config-build-advanced.pnguploading.4e448015.gif转存失败

5、Properties文件夹下Assemblyinfo.cs  Resources.resx  Resources.Designer.cs  Settings.settings  Settings.Designer.cs

  Assemblyinfo.cs:程序集信息对应于如下IDE操作

  

  Resources.resx  Resources.Designer.cs  Settings.settings  Settings.Designer.cs

  不是每个c#项目都有的...只有VS的WinForm项目模板才会自动生成,与C#无关...

  前者是项目资源的代码文件,后者是项目设置项的代码文件...

发布了721 篇原创文章 · 获赞 71 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/sinolover/article/details/104496933