我允许我的应用程序的用户运行 C# 片段,以便能够直接操作我的程序集中的某些对象,而无需我编写一个大型脚本接口层来显式公开所有内容。
此代码将被注入到动态编译的程序集中,因此我可以控制程序集本身,但我需要停止使用反射访问我的私有方法的代码。
我尝试在运行代码之前调用 securityPermissionObject.Deny() ,但这会阻止我的对象上的方法在用户代码调用它们时使用反射(有些方法会这样做)。
有没有办法只限制可疑程序集的权限而不影响它在我的受信任程序集上调用的公共方法?
(一个老问题,不知道你是否还需要答案)
当调用返回到您的公共方法时,您需要做的第一件事就是仔细清理参数,并拒绝任何错误调用。之后,您可以为RelectionPermission添加对Assert的调用。这基本上允许您调用的任何需要反射的代码都得到满足,并且不会在调用堆栈中看到更高的拒绝。