作成したフレームワークにサンドボックス レイヤーを追加しています。
主な概念は、フレームワークがプラグインのような 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
私は最初のアプローチに進むことができることを認識していますが、フレームワークをできるだけ柔軟にしたいので、この問題の回避策を見つけることを好みます.
誰でも解決策や提案を手伝ってもらえますか?