【发布时间】:2012-12-14 12:29:15
【问题描述】:
问题:StackFrame.GetMethod() 返回前缀为未知字符的属性名称(myProperty 返回为 __XY_myProperty)。
最近我们为现有类添加了一个属性。此类用于 ASP.NET。此类中的每个属性都会调用一个自定义安全检查函数,该函数使用堆栈跟踪来获取被调用者的方法名称,以根据该名称执行操作。
问题是,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() 调用。)
我们尝试的是:
- 已清除 ASP.NET 缓存
- 比较 .NET 补丁
- 重新启动服务器
这些都没有解决问题。
服务器信息:
- Windows 2003
- 在 VMWare 上运行(JIT 在 VMWare 上的优化是否不同?)
- IIS 6
- NET 3.5
- 发布模式下构建的 ASP.NET 项目
- 在调试模式下编译的 DLL 以使堆栈跟踪正常运行
【问题讨论】:
标签: asp.net .net-3.5 stack-trace jit