调试模式与释放模式

我只是看了以前关于主题的问题,但我有一些奇怪的结果。

首先,我遵循并使用了Scott Hanselman在他的博客中的旧帖子中提出的方法:http://www.hanselman.com/blog/HowToProgrammaticallyDetectIfAnAssemblyIsCompiledInDebugOrReleaseMode.aspx

因此,使用IsJITOptimizerDisabled我应该检查是否已经在发布模式或调试模式下编译了特定的DLL。

奇怪的是我只是试了一下,构建了一个简单的应用程序来检查该属性,并通知被检查的程序集处于调试或发布模式。 检查结果和一切都可以对两个我已经在两种模式下编译的DLL。

然后,我将这个简单的应用程序传递给了一个同事,确认他的工作站中的结果如预期的那样,Debug dll显示“Debug”,发布显示“Release”(这两个dll包含在简单应用程序的同一个zip中) 。

但是,当他试图用这个简单的应用程序在另一个服务器(通过mstsc)检查这些dll时,对于这两个dll,简单的应用程序显示“Debug”(即使用ILDASM打开DLL,一切似乎都很好,并且某些特定的方法包含在“#if DEBUG”区域不存在于Relase dll中)。

现在,我生气了,这个问题背后有什么理由吗? 我太老了,看不清发生了什么事? 可能是某种程度上依赖于环境的反思? 是否有一些Service Pack解决了类似的已知问题?

干杯,

赞布罗塔


DebuggableAttribute是一个属性,它不会被编译到可执行程序集中包含的IL代码中。 它在加载程序集时由运行时插入。 属性的创建可能受环境设置的影响。

例如,系统上启用的分析器可能创建了影响调试标志的环境变量或注册表设置。 MSDN论坛上的一个线程建议检查名为COR_*HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFramework下的注册表设置(可能还有HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFramework )的环境变量。


在这个特定的情况下使用Assembly.LoadFrom()并不是一个好主意。 使用fuslogvw.exe找出程序加载错误程序集的原因。 GAC,可能。

Anyhoo,这里调用LoadFile()。

链接地址: http://www.djcxy.com/p/27959.html

上一篇: Debug Mode vs. Release Mode

下一篇: Debug vs Release