说一点闲话
我在大学刚刚学习编程的时候,对于Debug和Release这两个词只是处于知道的水平,并没有深入了解。因为大学时期的编程更多的是为了实现,而不是使用。所以部署这个词,在大学时和我没有任何瓜葛的。现在想起一个完整的软件工程流程都走不完。
开始工作之后,工作之中涉及到了软件的部署。所谓部署就是,是把写好的程序从开发环境移植到用户的实际应用环境中去。
第一次去部署的时候,我问老大是不是要把他弄成一个安装软件,老大说不用,需要把Release版直接拷到生产环境中去。虽然没有说什么但是心里在犯嘀咕,因为感觉这并不是标准的软件工程流程,之后才反应过来,自己有点太照本宣科了。打一个比方:一些大型的软件公司,因为他们生产的软件使用人数比较多上万的数量级,而他们要是部署的话,一定是要把软件打包成一个软件安装包放到网上。让用户自己去安装,他们的用户是一群人。而像规模比较小的公司,他们的用户可能只是一个企业,所以说没有必要把软件打包成一个完整的软件安装包。因为这样费时又费力。又增加工作量。
Debug版和Release版本之间到底有什么区别一直是心中悬而未决的石头。
正文
在VS IDE中C#编写出来的程序,工程路径下除了源代码,还有什么东西?那些东西都是做什么用的?
Debug版和Release版本之间到底有什么区别?
要解决后一个问题,我想先把前一个问题说清楚。
obj文件夹是object的缩写,用于存放编译过程中生成的中间临时文件, 其中都有debug和release两个子目录,分别对应调试版本和发行版本, 在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。
- obj是object的缩写,用于存放编译过程中生成的中间临时文件, 其中都有debug和release两个子目录,分别对应调试版本和发行版本, 在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。
- Poperties文件夹 定义程序集的属性,项目属性文件夹一般只有一个。
- AssemblyInfo.cs 类文件,用于保存程序集的信息,如名称,版本等,这些信息一般与项目属性面板中的数据对应,不需要手动编写。
- .cs 类文件。源代码都写在这里。
- .resx 资源文件,一些资源存放在这里,一般不需要看。
- .csproj C#项目文件,用VS打开这个文件,就可以直接打开这个项目,自动生成。
- .csproj.user 是一个配置文件,自动生成的,会记录项目生成路径、项目启动程序等信息。
- .Designer.cs 设计文件,自动生成。
- .aspx 是网页文件,HTML代码写在这里面。
- .sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合
Debug版和Release版本之间到底有什么区别?
Debug版:
经过编译器编译出的项目.exe文件大,而且生成的二进制命令没有经过编译器的优化。项目中包含着丰富的调试信息,供programer调试程序。这就是为什么,当我们在Debug程序的时候,为什么程序就会在我们设置断电的地方自动停下,而且仿佛时间静止,还可以显示此时相关变量的状态。
Release版:
这个版本是的出发点是用户,所以不保存调试信息,编译器在编译的时候进行了各种优化,进而达到,代码文件最小,执行速度最优。
实际上,Debug 和 Release 并没有本质的界限,并不是非黑即白的。他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的Debug版,或是带有调试信息的Release版。
后记:
写着个的时候,还在考虑要不要,明确出来我说的是C#项目。写完之后才发现,完全没有必要。其实这是一个IDE使用者对一个IDE的盲人摸象似的分析。没必要纠结于IDE也没必要纠结于C++还是C#,道理是一样的。