Pea*_*nut 18 .net dynamic-assemblies
我最近被问到是否对.Net中的动态装配有所了解.简短的回答是 - 我没有.
我发现了很多描述如何创建动态程序集的文章,但没有一篇文章真实地解释了以下内容:
对上述任何解释都将非常感激.
非常感谢.
我会举几个例子:
ASPNET为每个ASPX,ASMX或ASHX生成程序集并动态加载它们.这里的真正好处是应用程序代码可以用模板语言部署,并且可以按需动态编译和运行.动态部分提供了一个非常简单和方便的部署模型,也意味着效率:实际上只加载了被调用的页面.
保存自解压存档时,DotNetZip会创建动态装配.实际上它不是"从内存中运行",它最终被写入文件,因此这可能适合或不适合动态程序集的定义.程序集是在运行时动态创建的.但那时候并未引用它.为什么动态创建它?因为exe需要能够使用特定的Win32图标,所以它可能需要版本号和其他属性.那些东西可以在编译时设置.此外,程序集的源代码是从模板派生的,使用调用者提供的各种数据来填充模板中的插槽.因此动态生成的程序集确实是正确的方法.
在.NET的ASMX Web服务框架中,wsdl.exe编译器(或xsd.exe工具)将生成用于序列化/反序列化XML消息的类型.它通常会发出将XML元素建模为公共字段的类型.但是,虽然DataGrid和其他数据绑定控件可以使用对象数组作为数据源,但它们只显示公共 属性.因此,应用程序无法执行webservices调用,获取对象数组,然后将其指定为Datagrid的源.我使用动态生成的程序集作为适配器,以允许数据驱动的控件使用webservices调用的输出.[我认为,这个问题随着ObjectDataSource和.NET中的其他变化而消失了].
在.NET内部,为特定类型实例化System.Xml.Serialization.XmlSerializer类会动态生成程序集.我想这里的胜利与任何重叠与编译的代码比较相同.在xml序列化中,基本思想是枚举类型的公共字段和属性,然后发出包含这些字段和props中的值的XML文档.如果应用程序不必使用System.Reflection来枚举类型的成员(非常懒惰),每次调用XmlSerializer.Serialize()时,这不是很好吗?
这是一个最近的SO问题,描述了有人想要创建动态程序集的场景:
如何使用代码生成来动态创建C#方法?
归档时间: |
|
查看次数: |
6088 次 |
最近记录: |