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

Code in Partially-Trusted AppDomain throws System.Security.Permissions.FileIOPermission on Relative Path resolve

我正在将沙盒层添加到我创建的框架中。

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

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

现在的问题是,在插件内部,虽然基本路径设置正确,但如果代码尝试使用它的相对路径加载文件,.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 以更正值。