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#无关...

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

REVERSE-PRACTICE-BUUCTF-7

REVERSE-PRACTICE-BUUCTF-7Youngter-drive[ACTF新生赛2020]rome[FlareOn4]login[SUCTF2019]SignInYoungter-drive exe程序,运行后提示输入flag,有upx壳,脱壳后ida分析 main函数中获取输入并拷贝,开启了两个线程分别运行StartAddr…

REVERSE-PRACTICE-BUUCTF-8

REVERSE-PRACTICE-BUUCTF-8[GUET-CTF2019]re相册[V&N2020 公开赛]strangeCpp[BJDCTF2020]easy[GUET-CTF2019]re elf文件,有upx壳,脱壳后ida分析 字符串交叉引用来到主逻辑函数sub_400E28 逻辑清晰,获取输入,验证输入&#xf…

NuGet的使用、部署、搭建私有服务

目录 前言 什么是NuGet?为什么要使用NuGetNuGet的优点使用 Get-Help NuGetInstall-PackageGet-PackageUninstall-Package制作NuGet库包搭建NuGet服务器上传NetGet库包新增NuGet源总结前言 什么是NuGet? Nuget是一个.NET平台下的开源的项目,它是Visual Studio的…

REVERSE-PRACTICE-BUUCTF-9

REVERSE-PRACTICE-BUUCTF-9[ACTF新生赛2020]usualCrypt[MRCTF2020]Transform[V&N2020 公开赛]CSRe[WUSTCTF2020]level1[ACTF新生赛2020]usualCrypt exe程序,运行后提示输入flag,无壳,ida分析 main函数逻辑清晰,获取输入&…

ASP.NET MVC Beta 新特性之 IValueProvider

在刚发布的ASP.NET MVC Beta版中,在UpdataModel方法中提供了一个带有IValueProvider参数的重载。那么这个IValueProvider有什么用呢? 我们先来看一个简单的场景,例如我们的blog系统有一个Post的对象,Post对象有一个Tags属性和Cat…

REVERSE-PRACTICE-BUUCTF-10

REVERSE-PRACTICE-BUUCTF-10[GWCTF 2019]xxor[HDCTF2019]Maze[WUSTCTF2020]level2[BJDCTF2020]BJD hamburger competition[GWCTF 2019]xxor elf文件,无壳,用ida分析 main函数的逻辑清晰,首先获取输入,为6个int64的值,…

Axure教程 axure新手入门基础(1)

axure新手入门基础(1) 名词解释: 线框图:一般就是指产品原型,比如:把线框图尽快画出来和把原型尽快做出来是一个意思。 axure元件:也叫axure组件或axure部件,系统自带了一部分最基础常用的,网上…

REVERSE-PRACTICE-BUUCTF-11

REVERSE-PRACTICE-BUUCTF-11[FlareOn4]IgniteMe[MRCTF2020]Xor[GKCTF2020]BabyDriver[MRCTF2020]hello_world_go[FlareOn4]IgniteMe exe程序,运行后提示输入flag,无壳,ida分析 主逻辑在start函数中,读取输入后check,验…

Axure教程 axure新手入门基础(2) 简单易上手

https://www.duote.com/tech/35/102713.html (二)Axure rp的线框图元件 l 图片 图片元件拖入编辑区后,可以通过双击选择本地磁盘中的图片,将图片载入到编辑区,axure会自动提示将大图片进行优化,以避免原型文件过大;选择图片时可以…

REVERSE-PRACTICE-BUUCTF-12

REVERSE-PRACTICE-BUUCTF-12[WUSTCTF2020]level3crackMe[FlareOn6]Overlong[WUSTCTF2020]Cr0ssfun[WUSTCTF2020]level3 elf文件,无壳,ida分析 main函数中,获取输入,对输入做base64编码,提示有错误,在程序中…

Axure RP使用基础教程

一、Axure界面介绍 1、页面导航面板(Pages) Axure的页面管理采用类似操作系统的文件夹和页面文件的管理方式,不同点是,页面文件可以存在子页面,这一点是考虑了页面与页面跳转或者嵌套页面等网页特点。 页面文件管理导…

REVERSE-PRACTICE-BUUCTF-13

REVERSE-PRACTICE-BUUCTF-13firmware[ACTF新生赛2020]Oruga[Zer0pts2020]easy strcmp[GXYCTF2019]simple CPPfirmware .bin(二进制)文件,由题目提示知是路由器固件逆向 参考:逆向路由器固件之解包 Part1 linux安装好binwalk和fir…

REVERSE-PRACTICE-BUUCTF-14

REVERSE-PRACTICE-BUUCTF-14[FlareOn3]Challenge1[GUET-CTF2019]number_game[GWCTF 2019]re3[网鼎杯 2020 青龙组]singal[FlareOn3]Challenge1 exe程序,运行后提示输入密码,输入错误退出程序,无壳,ida分析 main函数逻辑清晰&…

REVERSE-PRACTICE-BUUCTF-15

REVERSE-PRACTICE-BUUCTF-15[2019红帽杯]xx[ACTF新生赛2020]Universe_final_answer[WUSTCTF2020]level4findKey[2019红帽杯]xx exe程序,运行后直接输入,无壳,ida分析 交叉引用字符串“You win!”来到sub_1400011A0函数 主要的逻辑…

【三层架构】——COM/DCOM初识

背景: 在学习三层架构的时候,知道三层分为UI层(表现层)、BLL层(业务逻辑层)、DAL层(数据访问层),相对于传统的二层架构(客户端和数据库)来说&…

REVERSE-PRACTICE-BUUCTF-16

REVERSE-PRACTICE-BUUCTF-16[UTCTF2020]basic-reequation[安洵杯 2019]crackMe[FlareOn5]Minesweeper Championship Registration[UTCTF2020]basic-re elf文件,无壳,用ida分析 main函数就是简单的加减乘除运算 shiftF12,在字符串窗口看到fla…

IPC之命名管道

1.管道是通过IO接口存取得字节流, windows中利用得是ReadFile()和WriteFile(),windows利用单一句柄支持双向IO,命名管道也称做FIFO(first in first out) 命名管道得机制:一个进程把数据放到管道里,另一个知道管道名字得进程把数据把取走&…

REVERSE-PRACTICE-BUUCTF-17

REVERSE-PRACTICE-BUUCTF-17[网鼎杯 2020 青龙组]jocker[2019红帽杯]childRE[MRCTF2020]PixelShooter[ACTF新生赛2020]SoulLike[网鼎杯 2020 青龙组]jocker exe程序,运行后提示输入flag,无壳,用ida分析 main函数平衡栈后,F5反汇编…

Excluding Files From Team Foundation Version Control Using .tfignore Files

At one point I was coding on a hobby project, using Visual Studio Online for project management and source control. Because of the technologies involved, a large number of temporary files were being generated that I didn’t want checked in. Visual Studio’…

REVERSE-PRACTICE-BUUCTF-18

REVERSE-PRACTICE-BUUCTF-18[SWPU2019]ReverseMe[FlareOn1]Bob Doge[FlareOn5]Ultimate Minesweeper[GKCTF2020]Chellys identity[SWPU2019]ReverseMe exe程序,运行后提示输入flag,输入错误打印“Try again”,无壳,ida分析 交叉引…