AppDomain和调试符号

时间:2019-05-30 16:11:54

标签: c#

我有一个项目,其中我使用的AppDomains具有非常严格的PermissionSet。

问题在于,如果在AppDomain内部发生异常,则尽管已加载了PDB数据,但Exception对象的StackTrace属性包含堆栈跟踪中方法的名称,而不包含行号。进入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中运行的代码现在可以执行所需的任何操作,因此尽管这使我可以看到堆栈跟踪中的行号,但这不是可接受的解决方案。我在想必须要添加一个特定的权限才能添加到权限集中-但是我一生都无法弄清楚到底是什么权限。

任何人都可以在这里为我指明正确的方向,或者甚至更好,告诉我我需要添加哪些权限?谢谢!

1 个答案:

答案 0 :(得分:1)

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