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

在编译时创建额外的类型定义

  •  1
  • astellin  · 技术社区  · 16 年前

    最近我一直在使用mstest,我注意到testframework在编译时动态地生成访问器类。怎么能做到?

    在VS2010 C项目中有一个XML文件。我想用这个XML文件中的某些数据进行枚举。能做到吗?如果是这样,怎么办?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Kirk Woll    16 年前

    我自己推荐T4模板。非常容易使用,特别设计允许您在构建期间生成代码。 http://msdn.microsoft.com/en-us/library/bb126445.aspx

        2
  •  1
  •   James Curran    16 年前

    方法a)读取XML文件,解析它,从中生成C代码,将C代码写出到一个临时文件,编译该代码,删除临时文件。

    方法b)读取XML文件,分析它。使用System.Reflection.Emit命名空间或System.CodeDom命名空间中的方法直接从中生成IL代码。

        3
  •  1
  •   JaredPar    16 年前

    MSTEST以几种不同的方式实现这一点。简而言之,他们基本上做了以下的IIRC

    1. 连接到构建系统
    2. 在构建开始时,它们将自己的访问器生成到项目中的隐藏文件中。
    3. 生成完成后,它们将删除其文件

    您可以通过相同的过程实现类似的效果。然而,连接到构建系统中有点复杂。一个更简单的方法是构建一个定制的工具/代码生成器和钩子。这允许您在构建时处理一个文件,并输出一个要包含在构建中的相应代码文件。

    关于如何实现这一点,网上有几个例子。这是一对

        4
  •  0
  •   Jagmag    16 年前

    这个 System.CodeDom Namespace 是你的一个选择。

    它允许您使用C代码自动生成一个类并编译它。

    您可以在项目构建期间将此代码称为后期构建。

    这个 example 演示如何使用此命名空间创建类

    推荐文章