2011-04-13 80 views
4

什么是DLR为了正确运行而需要的必需的PermissionSet项目?.NET DLR和SecurityException的

我们在我们的沙盒脚本环境中启用了DLR。但是,像下面的一些代码...

dynamic foo = someobject 
foo.FooBar(); 

...只是导致一个相当模糊和“未完成” -looking抛出异常,如下所示:

System.Security.SecurityException: Request failed. 
    at CallSite.Target(Closure , CallSite , Object) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid1[T0](CallSite site, T0 arg0) 
    at AcmeCorp.AcmeRocket.Workflow.Scripting.Assemblies.WorkflowScriptImplementation.Test() 
    at AcmeCorp.AcmeRocket.Workflow.Scripting.Assemblies.WorkflowScriptImplementation.__action_activity_4397110c5d7141a6802a070d3b942b77() 
    --- End of inner exception stack trace --- 
    at AcmeCorp.AcmeRocket.Workflow.Scripting.WorkflowScriptProxy.Invoke(String method_name) 
    at AcmeCorp.AcmeRocket.Workflow.Execution.Executors.ActionActivityExecutor.Execute(WorkflowInstance wi, ActionActivity activity) 
    at AcmeCorp.AcmeRocket.Workflow.Execution.ActivityExecutorBase.Execute(WorkflowInstance wi, Activity activity) 
    at AcmeCorp.AcmeRocket.Workflow.Execution.WorkflowExecutor.ExecuteActivity(WorkflowInstance wi, Activity activity) 
    at AcmeCorp.AcmeRocket.Workflow.Execution.WorkflowExecutor.Execute(WorkflowInstance wi, Nullable`1 branch_index) 

通常SecurityException的包括大量的细节明确指出哪些权限导致它失败,但在这种情况下,我们没有得到 - 很烦人。 PS:如果我使用我们的沙盒暂时授予PermissionSet(PermissionState.Unrestricted)运行相同的测试,那么问题就会消失。但显然我们确实想要将其锁定到DLR所需的特定权限集。

PPS:当前(失败)的PermissionSet按如下方式创建:

var ps = new PermissionSet(PermissionState.None); 
ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 
ps.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.RestrictedMemberAccess)); 

感谢。

回答

2

您没有得到更详细的安全例外的原因是,它正在具有受限CAS权限的上下文中读取。如果您在完全可信的上下文中调用其ToString方法,则可以阅读完整的异常详细信息。

这就是说,我无法在简单的沙箱AppDomain场景中重现相同的问题,所以我想知道您的异常是否真的是由于DLR的使用。如果您尝试在同一权限集下的强类型目标实例上调用同一方法,会发生什么情况?

例如,如果调用的方法具有用于不受限制的权限集的LinkDemand,则可以重新生成类似的异常。尽管使用了不同的调用堆栈,但无论是针对动态还是强类型变量进行调用,都可以看到此问题。

+0

有时候,像这篇文章的第二个意见是它需要找到解决方案。发现我的程序集('someobject'源于,我的例子)缺少标记“AllowPartiallyTrustedCallersAttribute”。我对自己感到恼火,因为我没有检查并且早点仔细检查。 – nbevans 2011-04-13 13:44:24