我正在尝试设置沙箱AppDomain的最低权限,以便加载程序集。似乎必须对appBase具有PathDiscovery权限,对加载的程序集具有Read权限,但对依赖程序集不需要任何权限。我的问题是:为什么我们需要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);发布于 2011-08-11 00:30:03
我们为什么需要PathDiscovery?
因为成功地从指定路径加载程序集将显示该路径存在。同样,尝试从路径加载程序集时引发的某些异常也会表明该路径有效,即使目标文件不是.NET程序集也是如此。
为什么只需要加载的程序集才需要读权限,而不需要依赖的程序集?
由于加载的程序集不控制从中加载其依赖项的位置,因此仅能够加载依赖程序集并不会显示有关特定路径的有效性的信息。也就是说,它确实揭示了一些信息,因为.NET程序集搜索位置是众所周知的,所以我想可以说这里的检查应该更强一些。如果你对它有强烈的感觉,你可以在https://connect.microsoft.com/visualstudio/feedback上发布一个错误报告。
https://stackoverflow.com/questions/7013557
复制相似问题