正在从受限制的appdomain读取配置节

本文关键字:读取 配置 appdomain 受限制 | 更新日期: 2023-09-27 18:20:40

我在签名的程序集a中定义了一些配置节,这些配置节用于加载程序集a创建的自己的配置文件的应用程序域。

加载的程序集B不是完全信任的应用程序。

所有程序集都是使用.Net 4编写的。

程序集安全性使用PermissionSet进行管理。

问题是创建的域无法访问节,导致SecurityException"请求失败"所需操作为:<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true"/>

我已经尝试过给予很多权限,没有任何影响:

        permSet.AddPermission(new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(SecurityPermissionFlag.ControlEvidence));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(SecurityPermissionFlag.ControlPolicy));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(SecurityPermissionFlag.SerializationFormatter));
        System.Configuration.Configuration cnf = System.Configuration.ConfigurationManager.OpenMachineConfiguration();
        permSet.AddPermission(new System.Security.Permissions.FileIOPermission(FileIOPermissionAccess.Read, cnf.FilePath));
        permSet.AddPermission(new System.Security.Permissions.GacIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.EnvironmentPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.PublisherIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.RegistryPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.StrongNameIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.TypeDescriptorPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.UrlIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.ZoneIdentityPermission(PermissionState.Unrestricted));

我试着访问这样的部分:

(MySection)ConfigurationManager.GetSection("mySectionGroup/mySection")

像这样:

var configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var config = (DictionaryConfigurationSection)configuration.GetSection("agent/dictionaries");

定义该节时,requirePermission设置为false。

感谢

正在从受限制的appdomain读取配置节

事实上,ConfigurationSections是在一个完全信任的程序集中定义的。因此,部分信任调用程序无法读取配置节,即使存在require-permission=false。我找到了一个解决方法,用以下属性标记包含配置节定义的程序集:AllowPartiallyTrustedCallers