Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net动态程序集_.net_Dynamic Assemblies - Fatal编程技术网

.net动态程序集

.net动态程序集,.net,dynamic-assemblies,.net,Dynamic Assemblies,最近有人问我是否了解.Net中的动态程序集。简单的回答是——我不知道 我找到了大量描述如何创建动态程序集的文章,但没有一篇真正解释以下内容: 它们是什么(不是直接从内存运行) 与静态组件相比,它们有哪些优势 它们使用的真实示例 如能对上述内容作出解释,将不胜感激 非常感谢。有点过时,代码有点“粗俗”,但我想说的是,这是关于动态编译和一些突出问题的最容易阅读的文章之一 在这里,我学会了动态编译程序集,既可以在不需要卸载或控制安全性的情况下在内存中编译程序集,也可以通过远程处理加载临时文件以允许

最近有人问我是否了解.Net中的动态程序集。简单的回答是——我不知道

我找到了大量描述如何创建动态程序集的文章,但没有一篇真正解释以下内容:

  • 它们是什么(不是直接从内存运行)
  • 与静态组件相比,它们有哪些优势
  • 它们使用的真实示例
如能对上述内容作出解释,将不胜感激

非常感谢。

有点过时,代码有点“粗俗”,但我想说的是,这是关于动态编译和一些突出问题的最容易阅读的文章之一

在这里,我学会了动态编译程序集,既可以在不需要卸载或控制安全性的情况下在内存中编译程序集,也可以通过远程处理加载临时文件以允许卸载

一个真实的例子:一个在线.net正则表达式工具,它接受替换方法的c#代码,该替换方法被动态编译成沙盒程序集,用于执行替换并丢弃。这个策略工作得很好,但是不管沙箱如何,恶意代码被注入的可能性太大了,所以这个想法最终被放弃了


祝你好运。

我给你举几个例子:

  • 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序列化中,基本思想是枚举类型的公共字段和属性,然后发出一个xml文档,其中包含来自这些字段和属性的值。如果应用程序不必每次调用XmlSerializer.Serialize()时都使用System.Reflection来枚举类型的成员(非常慢),那不是很好吗


  • 下面是一个最近提出的问题,描述了一个场景,其中有人想要创建一个动态程序集: