【问题】
之前就遇到了:
一个C#项目,用debug模式编译出来的程序,无法正常运行:
但是换成release:
编译出来的exe,就可以正常运行了:
【解决过程】
1.这个问题,之前就遇到了。但是没去研究如何解决。
2.当前的环境是:
win7 x64
VS2010
注意到:
当前用的是x86去编译出来的exe -> 但是之前的很多C#项目,都是这样的设置的,都没有错误:release和debug,都可以正常运行的。
3.参考:
去看看,有没有什么设置。
然后发现一个现象,
当然从Debug:
变成Release时,自动会选上:
Optimize Code
所以,难道是:
此处,对于当前项目,当选上Optimize Code,程序才能正常运行?
那就去试试:
Debug模式下,估计也选上Optimize Code:
看看生成的exe是否能正常运行。
结果真的可以运行了:
但是,还是没找到根本原因,具体是什么地方导致此错误的。
毕竟之前别的C#程序,同样的环境下,都没有遇到这类问题。
4.然后去看看原帖中提到的,关于Optimize选项的含义:
/optimize (Enable/Disable Optimizations)
但是也没看出有什么特殊之处。
5.参考:
Release IS NOT Debug: 64bit Optimizations and C# Method Inlining in Release Build Call Stacks
但是也只是提到了优化与否,导致出错时stack输出信息的问题。
6.参考:
C# code works if running from Visual studio, but not from executable file?
但是我此处确保是没有
#if debug
之类的代码的。
7.参考:
WPF DotNET Application will run in debug mode, but .EXE will not run
去看看,是不是由于:
当前是x64的win,但是在debug下,选了x86而导致此错误的。
但是很明显,release也是x86,都是可以工作的。所以不是这方面的错误。
但是再去看看相关设置,看看是否有什么特殊的设置。
没看到。但是经过实测:
没有选择Optimize Code + 设置输出目标为x64平台
结果还是不行的:
所以,的确证明了:
此处和x86或x64,没关系。
8.去看了看高级设置,也还是没发现啥特殊设置的:
9.参考:
Application can not run if built in Release mode, Debug mode runs fine
提到的:
Why Program works in debug but not release mode
但是无果。
10.忘了说了:
关于,删除:
bin/debug
和:
obj\x86\Debug
中的旧文件,之前生成的文件,确保不是由于旧文件导致此类问题的事情,就不用提了,是个人,都可以想到。
根本不是这样的不小心而导致错误的。
11.参考:
DLL load error in debug mode ,but release mode is ok
我自己确定,此处不是缺少什么dll而导致的。
12.参考:
也没啥帮助。
【总结】
此处,现象:
x64 win7下,用VS2010开发C#的一个项目:
1.调试运行:
不论是debug模式还是release模式,去调试运行,都是正常的;
2.生成exe:
(1)debug模式编译生成exe的话,即使是放在项目的\bin\Debug下,双击exe也是无法运行的。
拷贝到别处,双击的话,更无法运行;
(2)换成release模式去编译生成exe的话:
就是完全正常的,可以运行的:
不论是本身在bin\Release下(其中包含了很多我的exe所依赖的dll)
还是单独拷贝此exe到别的文件夹下(其中没有了此程序所依赖的dll,但是我本身代码中,已经集成了dll了),双击也是可以运行的。
原因:
暂时没有搞懂根本原因。
解决办法:
只是看到了:
当模式从debug换成release时,项目属性->Build->General->Optimize Code,从没有选,到选上了
且另外测试结果表明:
当debug模式时,也故意选上此Optimize Code,编译生成的exe,也是可以运行的。
从而得出此处的表象:
不论是Debug模式还是Release模式,都确保选上Optimize Code,就可以使得生成的exe,可以正常运行了。
底层的根本原因,则有待以后深究。
转载请注明:在路上 » 【基本解决】VS2010的某个C#项目中debug模式编译出来的exe无法运行但release模式编译出来的exe可以正常运行