首页 > 解决方案 > AppDomains 和调试符号

问题描述

我有一个项目,我在其中使用具有非常受限的 PermissionSet 的 AppDomains。

问题是,如果 AppDomain 内部发生异常,则 Exception 对象的 StackTrace 属性包含堆栈跟踪中的方法名称,但不包含行号,尽管 PDB 数据已加载到程序集中在 AppDomain 中。

在调试过程中,我发现如果我对我的权限集进行以下更改,那么行号开始出现在堆栈跟踪中:

PermissionSet permSet = new PermissionSet(PermissionState.Unrestricted);    // Was PermissionState.None
permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

AppDomain newDomain = AppDomain.CreateDomain("Sandbox", null, new AppDomainSetup {......}, permSet);

显然,将权限集设置为不受限制的缺点是,在此 AppDomain 中运行的代码现在可以为所欲为,因此尽管这让我可以看到堆栈跟踪中的行号,但这不是一个可接受的解决方案。我认为必须有一个特定的权限需要添加到权限集中 - 但我无法终生弄清楚那是什么权限。

谁能在这里指出我正确的方向,或者更好的是,告诉我我需要添加什么权限?谢谢!

标签: c#

解决方案


正如评论中所讨论的,解决方案隐藏在 Exception 对象的源代码中,您需要添加 FileIOPermission(PathDiscovery)。


推荐阅读