Какие обязательные элементы PermissionSet
необходимы DLR для правильной работы?
Мы включили DLR в нашей среде сценариев с песочницей.Но некоторый код, подобный следующему ...
dynamic foo = someobject
foo.FooBar();
... просто приводит к довольно неопределенному и "незаконченному" исключению, которое выглядит следующим образом:
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));
Спасибо.