我在已签名的程序集A中定义了一些配置部分,这些部分用于加载由程序集A创建的自己的配置文件的应用程序域。
加载的程序集B不是完全信任的应用程序。
所有程序集都是使用.Net 4编写的。
使用PermissionSet管理程序集安全性。
问题是创建的域无法访问该节,导致SecurityException“Request Failed”。
要求的行动是:<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。
由于
答案 0 :(得分:1)
实际上,ConfigurationSections是在完全信任程序集中定义的。因此,即使存在require permission = false,部分信任调用者也无法读取配置节。 我找到了一个解决方法,使用以下属性标记包含配置节定义的程序集:AllowPartiallyTrustedCallers