我们如何让 T4 模板根据用户正在编辑的 .cs 文件生成代码?

Posted

技术标签:

【中文标题】我们如何让 T4 模板根据用户正在编辑的 .cs 文件生成代码?【英文标题】:How can we get the T4 template to generate code based on a .cs file that the user is editing? 【发布时间】:2015-08-16 16:08:49 【问题描述】:

我正在尝试创建一个 T4 模板,这将使我们的开发人员免于创建我们框架中必需的大量样板代码。假设开发人员创建了一个接口并使用我们的自定义属性对其进行标记。我希望任何标有该自定义属性的接口都可以通过其他方法得到增强,这意味着我的 T4 模板必须动态生成部分类。但是,我希望这种自动生成能够即时且无缝地发生,最好是在用于智能感知的内部自动编译发生时。您知道当您在 Visual Studio 中创建一个新类并切换到另一个源文件并开始使用该类而您不必保存或编译它时,Intellisense 能够立即看到您创建的新类吗?我希望从我的 T4 模板生成的代码具有相同的自动行为。有什么想法吗?

【问题讨论】:

【参考方案1】:

你不能轻易地做你想做的事,但这里有一些选项从最简单到最有可能是你想做的事情(最难)。

    创建code snippets

    创建Visual Studio Item Template

    使用Castle DynamicProxy 在运行时创建额外的位。

    创建一个单独的项目来保存 T4 生成的类,如my answer here中所述

    作为项目构建的前一步(修改 .csproj 文件以执行此操作),您可以编译要从中生成代码的源代码,然后对其进行反思,生成代码,然后添加在真正的编译步骤之前将其添加到项目中。这就是MSR Orleans 项目所做的。你可以阅读他们的source code here。这真的很酷! :-)

【讨论】:

嘿菲利普,你能指导我解决这个问题吗***.com/q/51453620/5816119

以上是关于我们如何让 T4 模板根据用户正在编辑的 .cs 文件生成代码?的主要内容,如果未能解决你的问题,请参考以下文章

在运行时(构建时)创建 T4 模板?

T4模板

项目模板和 C# 生成中的 T4

让 Visual Studio 在每次构建时运行 T4 模板

T4模板编辑器

T4模板使用