代码之家  ›  专栏  ›  技术社区  ›  Peanut

.net动态程序集

  •  14
  • Peanut  · 技术社区  · 15 年前

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

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

    • 与静态组件相比,它们有哪些优势

    非常感谢。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Sky Sanders    15 年前

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

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

        2
  •  7
  •   Community CDub    8 年前

    我给你举几个例子:

    1. 保存自解压存档文件时,DotNetZip会创建动态程序集。实际上,它不是“从内存运行”,它最终会写入一个文件,所以这可能适合也可能不适合动态程序集的定义。大会 在运行时动态创建。但在那一刻它没有被调用。为什么要动态创建它?因为exe需要能够使用特定的Win32图标,所以它可能需要版本号和其他属性。这些东西可以在编译时设置。另外,程序集的源代码是从模板派生的,使用调用者提供的各种数据来填充模板中的槽。因此,动态生成的程序集确实是正确的方法。

    2. 领域 对象作为数据源,它们仅显示为public 属性

    3. 在.NET内部,为特定类型实例化System.Xml.Serialization.XmlSerializer类将动态生成程序集。我想这里的胜利与任何解释代码与编译代码的比较是一样的。在xml序列化中,基本思想是枚举类型的公共字段和属性,然后发出一个xml文档,其中包含来自这些字段和属性的值。如果应用程序不必每次调用XmlSerializer.Serialize()时都使用System.Reflection枚举类型的成员(非常慢),那不是很好吗?



    How to use code generation to dynamically create C# methods?