2

アセンブリをロードするために、サンドボックスAppDomainの最小権限を設定しようとしています。appBaseに対するPathDiscovery権限と、ロードされたアセンブリに対する読み取り権限が必須のようですが、依存するアセンブリには権限は必要ありません。私の質問は次のとおりです。なぜPathDiscoveryが必要なのですか?必要なアセンブリごとに読み取りアクセスが十分ではありませんか?ロードされたアセンブリのみが読み取り権限を必要とし、依存するアセンブリは必要ないのはなぜですか?

ここに、コンテキストを与えるためのコードスニペットがあります。

AppDomainSetup setup = new AppDomainSetup
{
    ApplicationName = "Name",
    ApplicationBase = binFolder,
};

PermissionSet permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

// Mandatory. Why PathDiscovery is needed?
permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.PathDiscovery, binFolder));

// Mandatory. Why Read is not also needed for all dependent assemblies?
permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read, assemblyPath));

var domain = AppDomain.CreateDomain("Domain Name", null, setup, permissionSet);

domain.CreateInstanceFromAndUnwrap(assemblyPath, typeName);
4

1 に答える 1

4

なぜPathDiscoveryが必要なのですか?

指定されたパスからアセンブリを正常にロードすると、パスが存在することが明らかになるためです。同様に、パスからアセンブリをロードしようとしてスローされた特定の例外は、ターゲットファイルが.NETアセンブリでなくても、パスが有効であることを示します。

ロードされたアセンブリのみが読み取り権限を必要とし、依存するアセンブリは必要ないのはなぜですか?

ロードされたアセンブリは、依存関係がロードされる場所を制御しないため、依存アセンブリをロードできるだけでは、特定のパスの有効性に関する情報は明らかになりません。とはいえ、.NETアセンブリの検索場所はよく知られているので、いくつかの情報が明らかになります。したがって、ここでのチェックはもう少し強力なはずだと主張できると思います。それについて強く感じている場合は、https://connect.microsoft.com/visualstudio/feedbackにバグレポートを投稿できます。

于 2011-08-10T16:30:02.990 に答える