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,
	IEnumerable assemblyAttributes
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
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
  • name 的 Name 属性为 null。
  • name 的 Name 属性以空白开始,或者包含正斜杠或反斜杠。
AppDomainUnloadedException 尝试对已卸载的应用程序域进行操作。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.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 系统要求。