2009-11-12 31 views
2

我推迟使用生成的代码作为构建过程的一部分,因为害怕它在构建过程中引入的复杂性。简单和实用的C#代码生成(VS 2008或2010)

是否有一种简单的方法将构建时生成的代码集成到应用程序中?

那种代码我想的是类似的资源和设置文件的Visual Studio执行代码生成:

  • 有智能感知这里是有价值
  • 有很多的属性以及用于描述的属性之间的链接,但不可能在C#中简洁地实现。
  • 底层资源是可修改的,代码自动重新生成,无需任何用户交互,也无需理解生成器的内部结构。

对于(非真实世界)例如考虑生成的访问经由类似命名的C#属性(或方法)一个正则表达式的命名捕获基团的预编译。这是我想要生成的各种事情的典型代码:样板化包装器的长片段,其主要功能是启用编译时检查错误(在上面;访问不存在的捕获组或写入和无效的正则表达式)不重要的是,这些属性的智能感知。最后,这个设置应该可以被团队上的其他人轻松使用,只有最少的学习曲线。即,要求手动干预来重新生成代码是绝对不可接受的,也不能接受将生成的代码提交到源代码控制中。最糟糕的是,每个人都应该只需要安装一些扩展;理想情况下,扩展应该可以安装到源代码树中,以便任何检出树的人都可以在没有任何介绍的情况下构建项目。

对于工作得很好,它的关键,将IDE集成是优秀的:更新底层的“资源”定义文件应触发代码的再生无需任何用户交互,最好发电机本身便很容易以后为其他开发人员维护(即发电机调试能力有一定优势)。

最后,一种类似XSLT的方法,其中相同的模板可以应用于各种输入资源是理想的;因为这意味着如果你想要做的只是更新资源,并且因为它使模板重用变得微不足道,你甚至不需要查看实际的生成器代码。

我已经看过T4,但从我看到的这个有一个不太方便的类似于ASP的方法,其中模板和资源没有干净地分割(即,生成器负责查找资源的 - 这使得模板重用变得不那么容易)。

是否有更好的(更干净的)解决方案或运行T4的某种方式,使得相同的模板可以被平凡重用,并且(很像.NET设置文件),任何资源更新都会自动触发重新实现码?

摘要:(!不是模板) 我正在寻找一个代码生成方式,可以自动

  1. 重新生成代码,而无需开发干预时资源根本的变化。
  2. 维护起来有点简单
  3. 能够在几个资源之间共享相同的生成器模板(其中,#1号点可能意味着资源应该引用生成器而不是反之亦然)。

回答

6

您可以使用T4 Toolbox的T4ScriptFileGenerator。将“资源”文件的“自定义工具”属性更改为T4ScriptFileGenerator并保存更改。自定义工具将生成一个新的空T4脚本(.tt文件)。将您的代码生成逻辑放在这个.tt文件中。无论何时修改(并保存)资源文件,T4ScriptFileGenerator都将使用.tt文件生成输出代码。有关如何工作的示例,请参阅T4 Toolbox中的“LINQ to SQL Model”生成器,该工具箱使用.dbml文件作为“资源”。在由该生成器创建的.tt文件中,您将看到所有的代码生成逻辑位于单独的.tt文件中,并在include指令的帮助下重复使用。

+0

谢谢,我一定会尝试一下,看看它的效果如何! – 2009-11-12 14:49:25

0

您可能需要关注ABSE(http://www.abse.info)。 ABSE是一种代码生成和模型驱动的软件开发方法,在平台和语言方面是完全不可知的,所以您不会在为C#创建自己的生成器以及您希望的其他任何事情时遇到任何困难。最大的优点是您可以按照自己想要的方式生成代码。缺点是你可能需要做更多的工作才能建立你的模板。

ABSE允许您将您的领域知识捕捉到“原子”中,这些原子基本上是可以构建的较大模型的碎片。 ABSE既是声明式的,也是可执行的。该模型能够按照您的规范生成代码,并在模型级别结合自定义代码。

遗憾的是,ABSE仍在进行中,集成开发环境(名为AtomWeaver)仍在制作中。无论如何,发电机的CTP版本计划于2010年1月发布,所以我们已经接近它。