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

为什么我们需要路径发现?

因为从指定路径成功加载程序集会显示该路径存在。同样,尝试从路径加载程序集所引发的某些异常也会显示该路径是有效的,即使目标文件不是 .NET 程序集也是如此。

为什么只有加载的程序集需要读取权限而不是依赖的程序集?

因为加载的程序集不控制加载其依赖项的位置,所以仅仅能够加载依赖程序集不会透露有关特定路径有效性的信息。也就是说,它确实揭示了一些信息,因为 .NET 程序集搜索位置是众所周知的,所以我想可以说这里的检查应该更强一些。如果您对此感觉强烈,可以在https://connect.microsoft.com/visualstudio/feedback上发布错误报告。

于 2011-08-10T16:30:02.990 回答