ISSUE:StackFrame.GetMethod()
返回前缀为未知字符的属性名称( myProperty返回为__XY_myProperty )。
最近我们在现有类中添加了一个属性。该类用于ASP.NET。此类中的每个属性都调用一个自定义securitycheck函数,该函数使用stacktrace来获取被调用者的方法名称,以便根据该名称执行操作。
问题是,StackFrame
在运行时期间返回此新添加的属性名称( myProperty ),其前缀为未知字符( __ XY_myProperty )。这仅在生产机器上发生。我们无法在具有类似设置的任何其他机器中重现。
以下是代码示例:
// comments
public returntype myProperty
{
get
{
security.checkSecurity();
return returntype();
}
set
{
security.checkSecurity();
if (value == null)
{
Row["abc"] = anothervale;
}
else
{
Row["xyz"] = value;
}
}
}
// comment
StackFrame.GetMethod()
中的security.checkSecurity()
调用将myProperty方法名称返回为:__ XY_myProperty
(StackFrame.GetMethod()
调用未在上例中显示。)
我们尝试的是:
这些都没有解决问题。
服务器信息:
答案 0 :(得分:0)
答案是:
安装在计算机上的分析器正在改变代码检测的MSIL代码。
代码检测是在将代码提供给.NET运行库以供执行时能够修改代码的过程。当CLR加载一个类并执行其方法时,该方法的IL代码在即时(JIT)编译过程中被编译为本机指令。作为CLR的一部分提供的Profiling API允许您拦截此过程。在方法获得JIT编译之前,您可以修改其IL代码。
解决方案:卸载了探查器,一切正常。事实证明StackTrace不可靠。