发布与调试版本

时间:2013-03-19 21:08:45

标签: visual-studio-2010 c#-4.0 .net-4.0

我有一个.net 4.0类lib项目,当我在发行版中编译它时,我注意到二进制文件(.dll)的大小不比调试小。为什么是这样?它不应该更小吗?它还应该执行得更快一点吗?另外,如何判断.dll是否已构建为调试版或发布版?

2 个答案:

答案 0 :(得分:1)

除非在代码中使用#if DEBUG编译器指令,否则调试和释放可执行文件(dll,exe,等等)是相同的。 区别在于debug编译生成包含调试信息的.pdb文件。

此工具可以帮助您确定dll是调试还是发布:http://assemblyinformation.codeplex.com

答案 1 :(得分:1)

在构建程序集的Release版本时,C#编译器生成的IL的非常差异很小。它唯一值得注意的事情是省略NOP指令,帮助您在花括号上设置断点。仅仅是几个花絮,就像没有发出空类构造函数一样。所有小东西,只与更容易调试代码有关。给定默认的/filealign选项,得到的程序集不小的几率很好。或者只减少几千字节。

C#编译器没有内置的优化器,这不是它的工作。优化器内置于抖动中。由编译器发出的属性控制,DebuggableAttribute.IsJITOptimizerEnabled属性。对于Debug构建, true ,对于Release构建, false 。您可以使用ildasm.exe

查看其值

您将找到this answer中描述的抖动执行的优化类型。