System.AppDomain.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable)
方法描述
使用指定的名称、访问模式、存储目录、证据、权限请求、同步选项和自定义特性定义动态程序集。
语法定义(C# System.AppDomain.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable) 的用法)
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")] public AssemblyBuilder DefineDynamicAssembly( AssemblyName name, AssemblyBuilderAccess access, string dir, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, bool isSynchronized, IEnumerableassemblyAttributes )
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
name | System-Reflection-AssemblyName | 动态程序集的唯一标识。 |
access | System-Reflection-Emit-AssemblyBuilderAccess | 访问动态程序集所采用的模式。 |
dir | System-String | 保存动态程序集的目录的名称。如果 dir 为 null,则使用当前目录。 |
evidence | System-Security-Policy-Evidence | 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 |
requiredPermissions | System-Security-PermissionSet | 必需的权限请求。 |
optionalPermissions | System-Security-PermissionSet | 可选权限请求。 |
refusedPermissions | System-Security-PermissionSet | 被拒绝的权限请求。 |
isSynchronized | System-Boolean | 若要在动态程序集中同步模块、类型和成员的创建,则为 true;否则为 false。 |
assemblyAttributes | System-Collections-Generic-IEnumerable |
要应用于程序集的可枚举特性列表;如果无特性,则为 null。 |
返回值 | System.Reflection.Emit.AssemblyBuilder | 具有指定名称和功能的动态程序集。 |
提示和注释
使用此方法重载指定除非在创建动态程序集时已应用,否则无法正常使用的特性。 例如,如果在创建动态程序集后添加了安全特性(如 SecurityTransparentAttribute 和 SecurityCriticalAttribute),则这些特性无法正常使用。
仅当还提供了 evidence 形参,或者动态程序集被保存并且重新加载到内存中时,才使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 形参指定的权限请求。
注意
在开发用于发出动态程序集的代码过程中,建议您在 refusedPermissions 参数中包括 SecurityPermissionFlag.SkipVerification 标志。 包含此标志可确保将验证 Microsoft 中间语言 (MSIL)。 此技术将检测是否无意间生成了不可验证的代码,而这种代码很难检测到。 此技术的局限性是将它与需要完全信任的代码一起使用时,它还会导致引发 SecurityException。
只有完全受信任的调用方可以在定义动态 Assembly 时提供证据。 运行时将通过安全策略映射 Evidence 来确定授予的权限。 部分受信任的调用方必须为 evidence 形参提供 null。 如果 evidence 是 null,则运行时会将权限集(即当前授予集和拒绝集)从调用方的程序集复制到正在定义的动态程序集,并将策略标记为已解析。
如果将动态程序集保存到磁盘上,后面的加载将基于与保存动态程序集的位置关联的策略获取授权。
如果 isSynchronized 为 true,则将同步所得 AssemblyBuilder 的下列方法:DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。 如果在不同线程上调用这些方法中的两个,则一个方法完成前另一个方法将一直阻止。
注意
在 .NET Framework 1.0、1.1 和 2.0 版中,通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。 有关这些特性的更多信息,请参见 发出声明性安全特性。
.NET Framework 3.5 版 中引入了此方法重载。
System.AppDomain.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable)例子
异常
异常 | 异常描述 |
---|---|
ArgumentNullException | name 为 null。 |
ArgumentException |
|
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。 |
版本信息
.NET Framework 受以下版本支持:3.5 SP1、3.0 SP1、2.0 SP1 在 4 中过时(编译器警告) .NET Framework Client Profile 受以下版本支持:3.5 SP1 在 4 中过时(编译器警告)
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。