反射发出动态程序集方案
更新:2007 年 11 月
反射发出支持创建动态程序集内定义的动态模块。在动态程序集中创建的动态模块可以是瞬态的或持久的。
对类型引用的限制
程序集可以引用在其他程序集中定义的类型。瞬态动态程序集可以安全地引用在其他瞬态动态程序集、持久动态程序集或静态程序集中定义的类型。然而,公共语言运行库不允许持久动态模块引用在瞬态动态模块中定义的类型。这是因为:当持久动态模块保存到磁盘然后被加载时,运行库无法解析对瞬态动态模块中定义的类型的引用。
对发出到远程应用程序域的限制
某些方案要求在远程应用程序域中创建并执行动态程序集。反射发出不允许将动态程序集直接发出到远程应用程序域。解决方案是:在当前应用程序域中发出动态程序集,将发出的动态程序集保存到磁盘,然后将动态程序集加载到远程应用程序域中。
动态程序集访问模式
可以使用下列访问模式之一创建动态程序集:
Run
由 AssemblyBuilder 表示的动态程序集是瞬态的。此动态程序集只能用于执行发出的代码。
Save
由 AssemblyBuilder 表示的动态程序集是持久的,但直到从磁盘加载保存的可移植可执行 (PE) 文件后才能执行。
RunAndSave
由 AssemblyBuilder 表示的动态程序集是持久的,但在程序集被保存到磁盘之前和/或之后同样可以执行。
定义动态程序集时必须指定访问模式,并且以后不能更改。运行库使用动态程序集的访问模式优化程序集的内部表示形式。