Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 第一个失败权限的类型为:-错误_C#_Sandbox - Fatal编程技术网

C# 第一个失败权限的类型为:-错误

C# 第一个失败权限的类型为:-错误,c#,sandbox,C#,Sandbox,我正在尝试创建一个沙箱来运行不受信任的代码。我一直在遵循Microsoft文档()中给出的示例 但是,我无法让程序正常运行,因为我一直在获取失败的权限/失败的程序集或AppDomain等 这是沙盒代码(取自给定的示例) 当程序运行时,调用目标时会捕获以下异常 (System.Security.SecurityException:请求失败。在第58行) 第一个失败的权限的类型是: System.Security.PermissionSet此需求用于: 失败程序集的授权集为: 失败的程序集或AppD

我正在尝试创建一个沙箱来运行不受信任的代码。我一直在遵循Microsoft文档()中给出的示例 但是,我无法让程序正常运行,因为我一直在获取失败的权限/失败的程序集或AppDomain等

这是沙盒代码(取自给定的示例)

当程序运行时,调用目标时会捕获以下异常

(System.Security.SecurityException:请求失败。在第58行)

第一个失败的权限的类型是: System.Security.PermissionSet此需求用于:

失败程序集的授权集为:

失败的程序集或AppDomain为:不受信任的代码, 版本=1.0.0.0,区域性=中性,PublicKeyToken=36DF3255C2D3

失败程序集的区域是:MyComputer 失败的程序集是:
file:///C:Users/Sam/Desktop/SandboxExample/UntrustedCode/UntrustedCode/bin/debug/UntrustedCode.EXE

class Sandboxer : MarshalByRefObject
{
    const string pathToUntrusted = @"..\..\..\UntrustedCode\bin\Debug";
    const string untrustedAssembly = "UntrustedCode";
    const string untrustedClass = "UntrustedCode.UntrustedClass";
    const string entryPoint = "IsFibonacci";
    private static Object[] parameters = { 45 };
    static void Main()
    {
        AppDomainSetup adSetup = new AppDomainSetup();
        adSetup.ApplicationBase = Path.GetFullPath(pathToUntrusted);

        PermissionSet permSet = new PermissionSet(PermissionState.None);
        permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

        StrongName fullTrustAssembly = typeof (Sandboxer).Assembly.Evidence.GetHostEvidence<StrongName>();

        AppDomain newDomain = AppDomain.CreateDomain("Sandbox", null, adSetup, permSet, fullTrustAssembly);
        //new AppDomain.
        ObjectHandle handle = Activator.CreateInstanceFrom(
            newDomain, typeof (Sandboxer).Assembly.ManifestModule.FullyQualifiedName,
            typeof (Sandboxer).FullName
        );
        //untrusted code.
        Sandboxer newDomainInstance = (Sandboxer)handle.Unwrap();
        newDomainInstance.ExecuteUntrustedCode(untrustedAssembly, untrustedClass, entryPoint, parameters);
    }
    public void ExecuteUntrustedCode(string assemblyName, string typeName, string entryPoint, Object[] parameters)
    {
        MethodInfo target = Assembly.Load(assemblyName).GetType(typeName).GetMethod(entryPoint);
        try {
            //Now invoke the method.
            bool retVal = (bool)target.Invoke(null, parameters);
        }
        catch (Exception ex)
        {
            new PermissionSet(PermissionState.Unrestricted).Assert();
            Console.WriteLine("SecurityException caught:\n{0}", ex.ToString());
            CodeAccessPermission.RevertAssert();
            Console.ReadLine();
        }
    }
}
namespace UntrustedCode {
    public class UntrustedClass {
        public static bool IsFibonacci(int number) {
            File.ReadAllText("C:\\Temp\\file.txt");
            return false;
        }
    }
}