简单实用的C#代码生成(VS 2008或2010)

Eam*_*nne 2 c# t4 code-generation visual-studio

我推迟使用生成的代码作为构建过程的一部分,因为它担心它在构建过程中引入的复杂性.

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

我正在考虑的代码类似于 Visual Studio执行的资源和设置文件代码生成:

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

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

为了使其运行良好,IDE集成非常重要:更新底层的"资源"定义文件应该触发 代码的重新生成而无需任何用户交互,理想情况下,生成器本身将很容易为其他开发人员维护(即一些发电机调试能力是一个加号).

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

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

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

简介: 我正在寻找可以实现的代码方法

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

Ole*_*ych 6

您可以使用T4 Toolbox中的 T4ScriptFileGenerator .将"资源"文件的"自定义工具"属性更改为T4ScriptFileGenerator并保存更改.自定义工具将生成一个新的空T4脚本(.tt文件).将代码生成逻辑放在此.tt文件中.每次修改(并保存)资源文件时,T4ScriptFileGenerator都将使用.tt文件生成输出代码.有关其工作原理的示例,请参阅T4工具箱中的"LINQ to SQL Model"生成器,该生成器使用.dbml文件作为"资源".在此生成器创建的.tt文件中,您将看到所有代码生成逻辑都驻留在单独的.tt文件中,并在include指令的帮助下重用.