将程序集加载到具有较低安全性的应用程序域中

时间:2012-01-31 18:19:58

标签: c# .net applicationdomain

我正在尝试创建一个只读访问文件系统的Sandbox App域。我写的代码是

    var ps = new PermissionSet(PermissionState.None);
    ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
    var f = new FileIOPermission(PermissionState.None);
    f.AllLocalFiles = FileIOPermissionAccess.Read;
    ps.AddPermission(f);

    AppDomain domain = AppDomain.CreateDomain("MyDomain",
        null,
        new AppDomainSetup { ApplicationBase = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) },
        ps                
        );
    string pathToDll = @"c:\temp\test.dll";
    string thirdPartyFullName = "MyTest.Test";
    IPlugin myObject = (IPlugin)domain.CreateInstanceFromAndUnwrap(pathToDll, thirdPartyFullName);

几乎除了最后一行的错误外,还有

的错误

  

请求类型的许可   'System.Security.Permissions.FileIOPermission,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'   失败。

如果我将App Domain上的FileIOPermission更改为具有完全访问权限,则运行正常。我是否需要在程序集中加载我正在加载到应用程序域中以表示它只需要对文件系统的读访问权?

我正在使用.Net 4.0。

1 个答案:

答案 0 :(得分:1)

我想你可能也需要

FileIOPermissionAccess.PathDiscovery

http://msdn.microsoft.com/en-us/library/y7h7t2a2.aspx