0

作成したフレームワークにサンドボックス レイヤーを追加しています。

主な概念は、フレームワークがプラグインのような 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

私は最初のアプローチに進むことができることを認識していますが、フレームワークをできるだけ柔軟にしたいので、この問題の回避策を見つけることを好みます.

誰でも解決策や提案を手伝ってもらえますか?

4

1 に答える 1