2011-08-10 7 views
2

私は、アセンブリを読み込むためにサンドボックスAppDomainの最小限の権限を設定しようとしています。読み込まれたアセンブリのappBaseとReadパーミッションについてPathDiscoveryパーミッションを持つことは必須ですが、依存するアセンブリに対してパーミッションは必要ありません。私の質問は次のとおりです: なぜPathDiscoveryが必要ですか?必要なアセンブリごとに十分な読み取りアクセスができませんか? ロードされたアセンブリだけに読み取り権限が必要で、依存権限が必要でないのはなぜですか?ここでサンドボックスAppDomainでアセンブリをロードするための最小限の権限を探します。これらのアクセス許可が必要な理由

いくつかのコンテキストを与えるためのコードスニペットは:

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

はなぜPathDiscoveryが必要なのでしょうか?

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

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

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

関連する問題