我有一个项目,其中我使用的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中运行的代码现在可以执行所需的任何操作,因此尽管这使我可以看到堆栈跟踪中的行号,但这不是可接受的解决方案。我在想必须要添加一个特定的权限才能添加到权限集中-但是我一生都无法弄清楚到底是什么权限。
任何人都可以在这里为我指明正确的方向,或者甚至更好,告诉我我需要添加哪些权限?谢谢!
答案 0 :(得分:1)
如评论中所述,解决方案隐藏在Exception对象的源代码中,并且您需要添加FileIOPermission(PathDiscovery)。