我正在尝试为沙盒 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);