我正在将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
我知道我可以采用第一种方法,但我希望框架尽可能灵活,因此我更愿意找到解决此问题的方法。
任何人都可以帮忙解决任何问题或建议吗?
答案 0 :(得分:0)
没关系,
我自己找到了问题的答案。
我必须将AppDomain的Environment.CurrentDirectory
设置为正确值。