【发布时间】:2012-08-09 14:33:20
【问题描述】:
我有一个相当稳定的服务器应用程序版本,已经在几十个客户中部署了将近一年。
一位新客户最近设置了应用程序并收到以下错误:
System.MethodAccessException:通过安全透明方法尝试 [SomeMethod] 访问安全关键方法 [SomeOtherMethod] 失败了。
SomeMethod 和 SomeOtherMethod 都是我编写的程序集中的方法,它们是针对 .NET 4 构建的,并且在 Windows 服务中运行。如果有所不同,SomeOtherMethod 确实引用了针对 .NET 2.0 构建的第 3 方程序集 (EntLib 4.1) 中的类型。查看 EntLib 4.1 的代码,我确实看到它们同时使用 SecurityTransparent 和 APTC 属性,但这从未在其他客户端引起问题。
这些程序集是从 .NET 2.0 CLR 升级而来的,但在很久以前。这个确切的代码在其他客户上运行得很好,我没有明确使用 APTC 属性,也没有在任何地方使用 SecurityCritical 属性。
这使我得出结论,这是一个配置问题,或者可能是 .NET Framework 补丁问题。是否有针对 .NET 发布的补丁会导致这种重大变化?是否有配置设置强制执行这种默认关闭但我的客户可能已启用的检查?
最后一点。我的服务利用 SSRS RDLC 生成 PDF。由于 .NET 4 中的一些变化,我必须通过以下配置强制服务使用旧版安全策略:
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
有关我为什么需要这样做的更多详细信息,请参阅此 stackoverflow 帖子:Very High Memory Usage in .NET 4.0
重要的是,我对所有其他客户也这样做。只有这一位客户有问题。
【问题讨论】:
标签: security .net-4.0 cas code-access-security