我们如何让T4模板根据用户正在编辑的.cs文件生成代码?
How can we get the T4 template to generate code based on a .cs file that the user is editing?
我正在尝试创建一个 T4 模板,它可以让我们的开发人员免于创建框架中必需的大量样板代码。假设开发人员创建了一个接口并使用我们的自定义属性对其进行了标记。我希望它能通过其他方法增强任何标有该自定义属性的接口,这意味着我的 T4 模板必须即时生成部分 classes。但是,我希望这种自动生成能够即时且无缝地发生,最好是在用于智能感知的内部自动编译发生时发生。你知道当你在 Visual Studio 中创建一个新的 class 并切换到另一个源文件并开始使用那个 class 时,你不必保存或编译它,Intellisense 能够马上看到您创建的新 class 了吗?我希望从我的 T4 模板生成的代码具有相同的自动行为。有什么想法吗?
您无法轻松完成您想做的事情,但这里有一些选项,从最简单到最有可能(最难)的顺序排列。
创建代码
片段
使用 Castle DynamicProxy 在 运行 时创建额外的位。
创建一个单独的项目来保存生成的 T4 类,如 my answer here
中所述
作为项目构建的前一步(修改 .csproj 文件来执行此操作),您可以编译要从中生成代码的源代码,然后对其进行反思,生成代码,然后在真正的编译步骤之前将其添加到项目中。这就是MSR Orleans project does. You can read their source code here。这真的很酷! :-)
我正在尝试创建一个 T4 模板,它可以让我们的开发人员免于创建框架中必需的大量样板代码。假设开发人员创建了一个接口并使用我们的自定义属性对其进行了标记。我希望它能通过其他方法增强任何标有该自定义属性的接口,这意味着我的 T4 模板必须即时生成部分 classes。但是,我希望这种自动生成能够即时且无缝地发生,最好是在用于智能感知的内部自动编译发生时发生。你知道当你在 Visual Studio 中创建一个新的 class 并切换到另一个源文件并开始使用那个 class 时,你不必保存或编译它,Intellisense 能够马上看到您创建的新 class 了吗?我希望从我的 T4 模板生成的代码具有相同的自动行为。有什么想法吗?
您无法轻松完成您想做的事情,但这里有一些选项,从最简单到最有可能(最难)的顺序排列。
创建代码 片段
使用 Castle DynamicProxy 在 运行 时创建额外的位。
创建一个单独的项目来保存生成的 T4 类,如 my answer here
中所述
作为项目构建的前一步(修改 .csproj 文件来执行此操作),您可以编译要从中生成代码的源代码,然后对其进行反思,生成代码,然后在真正的编译步骤之前将其添加到项目中。这就是MSR Orleans project does. You can read their source code here。这真的很酷! :-)