最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【基本解决】VS2010的某个C#项目中debug模式编译出来的exe无法运行但release模式编译出来的exe可以正常运行

C# crifan 12867浏览 0评论

【问题】

之前就遇到了:

一个C#项目,用debug模式编译出来的程序,无法正常运行:

debug exe has stopped working

但是换成release:

x86 release mode

编译出来的exe,就可以正常运行了:

release can work and run

 

 

【解决过程】

1.这个问题,之前就遇到了。但是没去研究如何解决。

2.当前的环境是:

win7 x64

VS2010

注意到:

当前用的是x86去编译出来的exe -> 但是之前的很多C#项目,都是这样的设置的,都没有错误:release和debug,都可以正常运行的。

3.参考:

C# Application works in Debug does not work with exe without advanced debug info FULL and no optimization

去看看,有没有什么设置。

然后发现一个现象,

当然从Debug:

debug mode not select optimize code

变成Release时,自动会选上:

Optimize Code

release mode select optimize code

所以,难道是:

此处,对于当前项目,当选上Optimize Code,程序才能正常运行?

那就去试试:

Debug模式下,估计也选上Optimize Code:

for debug also select the optimize code

看看生成的exe是否能正常运行。

结果真的可以运行了:

indeed can run for debug select optimize code

但是,还是没找到根本原因,具体是什么地方导致此错误的。

毕竟之前别的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平台

结果还是不行的:

platform target x84 but not select optimize code still not work

所以,的确证明了:

此处和x86或x64,没关系。

8.去看了看高级设置,也还是没发现啥特殊设置的:

check advanced option but not special

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.参考:

Surviving the Release Version

也没啥帮助。

 

【总结】

此处,现象:

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可以正常运行

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.191 seconds, using 22.09MB memory