部分受信任的AppDomain中的代码在相对路径解析时抛出System.Security.Permissions.FileIOPermission

时间:2016-04-18 17:34:28

标签: c# security relative-path appdomain appdomainsetup

我正在将Sandbox图层添加到我创建的框架中。

主要概念是框架加载类似插件的DLL。

在插件加载中,我创建一个AppDomain来隔离执行并将AppDomain的ApplicationBase设置为DLL的目录,并将访问权限设置为full。

现在的问题是,在插件内部,虽然基本路径设置正确,但如果代码尝试使用它的相对路径加载文件,.net将引发System.Security.Permissions.FileIOPermission异常

但是,使用绝对路径可以轻松加载相同的文件。

我尝试了不同的安全权限集但没有人修复相对路径加载问题。

以下是我正在使用的代码:

//AppDomain creation

string directory = Path.GetDirectoryName(assemblyPath);

PermissionSet permissionSet = new PermissionSet(PermissionState.None);

permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, directory));

permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Infrastructure));

AppDomainSetup appDomainSetup = new AppDomainSetup
{
   ApplicationBase = directory,

   PrivateBinPath = directory,

   PrivateBinPathProbe = directory
};

AppDomain appDomain = AppDomain.CreateDomain("Sandbox", null, appDomainSetup, permissionSet);


//Code running inside the AppDomain

string path = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,Path.Combine("Resources","Image.jpg"))); //Works fine

string path = Path.GetFullPath(Path.Combine("Resources","Image.jpg")); //Throws System.Security.Permissions.FileIOPermission exception

我知道我可以采用第一种方法,但我希望框架尽可能灵活,因此我更愿意找到解决此问题的方法。

任何人都可以帮忙解决任何问题或建议吗?

1 个答案:

答案 0 :(得分:0)

没关系,

我自己找到了问题的答案。

我必须将AppDomain的Environment.CurrentDirectory设置为正确值。