我已经推迟使用生成的代码作为构建过程的一部分,因为担心它会在构建过程中引入复杂性。
有没有一种简单的方法可以将构建时生成的代码集成到应用程序中?
我正在考虑的代码类型类似于Visual Studio 执行的资源和设置文件代码生成:
- 这里有智能感知很有价值
- 有很多属性和属性之间的联系很容易描述,但在 C# 中却无法简洁地实现。
- 底层资源是可修改的,代码会自动重新生成,无需任何用户交互,也无需了解生成器的内部结构。
对于(非现实世界)示例,考虑一个预编译器,它通过类似命名的 C# 属性(或方法)生成对 Regex 的命名捕获组的访问器。这是我想要生成的典型的东西:样板包装的长片段,其主要功能是启用编译时检查错误(在上面;访问不存在的捕获组或编写和无效的正则表达式)并且没有不太重要的是,这些属性的智能感知。最后,团队中的其他人应该可以轻松使用此设置只有最低限度的学习曲线。即,要求人工干预来重新生成代码是绝对不可接受的,也不可接受将生成的代码提交到源代码控制中。在最坏的情况下,每个人都应该只需要安装一些扩展;理想情况下,扩展应该可以安装到源树中,这样任何签出树的人都可以在没有任何介绍的情况下构建项目。
要使其正常工作,IDE 集成必须非常出色:更新底层“资源”定义文件应该触发 代码的重新生成,而无需任何用户交互,理想情况下,生成器本身将易于稍后为其他开发人员维护(即一些生成器调试能力是一个加号)。
最后,可以将相同模板应用于各种输入资源的类似 XSLT 的方法是理想的;既因为这意味着如果您只想更新资源,您甚至不需要查看实际的生成器代码,并且因为它使模板重用变得微不足道。
我看过 T4,但据我所知,这有一种不太方便的类似 ASP 的方法,其中模板和资源没有被干净地分割(即,生成器负责查找资源 - 这使得模板重用变得不那么容易)。
是否有更好(更清洁)的解决方案或某种运行 T4 的方式,以便可以轻松地重用相同的模板并且(很像 .NET 设置文件)资源的任何更新都会自动触发已实现代码的重新生成?
摘要: 我正在寻找一种可以
- 当底层资源(不是模板!)发生变化时,无需开发人员干预即可自动重新生成代码。
- 维护起来有点简单
- 能够在多个资源之间共享相同的生成器模板(第 1 点可能意味着资源应该引用生成器,反之亦然)。