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

您在.NET中使用代码生成做什么[关闭]

  •  3
  • Andy  · 技术社区  · 16 年前

    动态运行时c#代码生成 ? 具体来说:您使用CodeDOM名称空间的目的是什么?

    6 回复  |  直到 16 年前
        1
  •  2
  •   Marc Gravell    16 年前

    飞行中的codegen?你是说在运行时?我使用它来创建对代码的高性能访问,而这些代码将以其他方式使用反射。很多时候,你可以使用像 Delegate.CreateDelegate ILGenerator 等都有自己的位置。

    我用这个 protobuf-net Delegate.CreateDelegate ),及 HyperDescriptor 创建一个更快的 PropertyDescriptor 实施但在这两种情况下,我都使用 ILG发生器

    事实上 个人 除非迫不得已,否则我真的不会费心去学习代码;对于 工作,我会看看 Expression 第一。我有一篇关于 InfoQ 在这里讨论这个,或者各种各样的事情等等 my blog


    如果你是说 codegen (from .proto)

        2
  •  2
  •   TrueWill    16 年前

    我不直接做,但我使用 Moq 库为单元测试动态生成模拟和存根。我相信这是有用的 Castle.DynamicProxy

        3
  •  1
  •   Pete OHanlon    16 年前

    我们有一个规则引擎,它用XML对规则进行建模,但出于性能原因,将其部署为编译对象。代码生成允许我们获取XML并将其转换为标准的.NET组件。你一定会喜欢密码的。

        4
  •  0
  •   Lee    16 年前

    我测试一个应用程序,它的UI是用XAML描述的。我从XAML为UI测试自动化生成屏幕接口类。

        5
  •  0
  •   PHeiberg    16 年前

    Duck typing 通过在运行时创建适配器是一个很好的例子,说明何时需要使用代码dom。

        6
  •  -1
  •   Mike Dunlavey    16 年前

    示例:有一次,我接管了一个项目,构建了一座从旧的层次数据库到新的关系数据库的“桥梁”。输入是X(数据库模式描述)和Y(旧数据库)。X很少变化,但Y经常变化。设计了P(X,Y)。设计文件厚约2英寸,预计需要2人18个月才能完成,性能是一个主要问题。

    由于其中一个输入X很少更改,因此这看起来像是代码生成的工作。编写了一个C程序来读取X并打印出一个新的C程序PX(Y)。然后PX大约每周重新生成一次,编译并链接,整个星期用于生产。它以高速运行,因为它不需要处理X,只需要处理Y。完成的代码生成器(C)只有0.5英寸厚,由2人在3个月内完成。

    顺便说一下,编译器就是这样做的。他们获取程序X的文本描述,并将其转换为可运行程序PX,然后该程序处理输入Y,