gpt4 book ai didi

c# - Debug模式与 Release模式 - IsJITOptimizerDisabled 属性

转载 作者:行者123 更新时间:2023-11-30 17:21:23 24 4
gpt4 key购买 nike

我刚刚查看了以前关于该主题的问题,但我得到了一些奇怪的结果。

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

因此,我应该使用 IsJITOptimizerDisabled 检查特定 DLL 是否已在 Release模式或 Debug模式下编译。

奇怪的是,我刚刚尝试过,构建了一个简单的应用程序来检查该属性并通知检查的程序集处于调试或 Release模式。针对我已经在两种模式下编译的两个 dll 检查了结果和一切正常。

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

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

现在,我要疯了,这个问题背后有什么原因吗?我是不是太老了,看不出发生了什么?反射是否以某种方式依赖于环境?是否有一些服务包解决了类似的已知问题?

干杯,

詹卢卡

最佳答案

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

例如,系统上启用的探查器可能创建了影响调试标志的环境变量或注册表设置。 thread on the MSDN forums建议检查名为 COR_* 的环境变量或 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 下的注册表设置(可能还有 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\. NETFramework)。

关于c# - Debug模式与 Release模式 - IsJITOptimizerDisabled 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com