c# - 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 中运行的代码现在可以为所欲为,因此尽管这让我可以看到堆栈跟踪中的行号,但这不是一个可接受的解决方案。我认为必须有一个特定的权限需要添加到权限集中 - 但我无法终生弄清楚那是什么权限。
谁能在这里指出我正确的方向,或者更好的是,告诉我我需要添加什么权限?谢谢!
解决方案
正如评论中所讨论的,解决方案隐藏在 Exception 对象的源代码中,您需要添加 FileIOPermission(PathDiscovery)。
推荐阅读
- python - EMR 笔记本不存在 IAM 角色
- angular - 使用 const { } 时哪些属性会暴露在外部
- python - 无法使用 python 3.8 安装 cvxpy
- laravel - 如何在 Laravel/Lighthouse/Passport/Nuxt 应用程序上使用 Dusk 测试登录?
- git - 如何可靠地确定远程存储库中的最后提交日期?
- javascript - 无法在 vue 图像 src 绑定中使用波浪号 (~)
- android - 添加 ClickListener 时出现 NullPointerException
- assembly - 如何在 ARM Assembly 中将大写字母转换为小写字母?
- php - 使用 php 将联系人保存到手机不直接打开保存联系人屏幕(iPhone 用户)
- swift - 以编程方式滚动到 WKWebView 的底部不起作用