部分受信任的AppDomain中的代码在相对路径解析上引发System.Security.Permissions.Fil



我正在为我创建的框架添加一个沙盒层。

主要概念是框架加载类似插件的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

我知道我可以选择第一种方法,但我希望框架尽可能灵活,因此我更喜欢找到解决这个问题的方法。

有人能提供任何解决方案或建议吗?

没关系,

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

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

相关内容

  • 没有找到相关文章

最新更新