如何调试自定义 Entity Framework Core T4 模板

How to debug custom Entity Framework Core T4 templates

提问人:blackcomb 提问时间:5/5/2023 最后编辑:blackcomb 更新时间:5/10/2023 访问量:231

问:

我按照以下文档操作,了解如何使用自定义 T4 模板从具有 EF Core 的数据库生成代码: https://learn.microsoft.com/en-us/ef/core/managing-schemas/scaffolding/templates

现在,当我修改模板时,调试 T4 文件中错误的最佳方法是什么?

如果我执行脚手架命令并且 EntityType.t4 文档中有任何错误,我只收到一个非常通用的错误消息:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.TextTemplatingModelGenerator.GenerateModel(IModel model, ModelCodeGenerationOptions options)

这是我在 Visual Studio 包管理器控制台中使用的基架命令:Scaffold-DbContext "Data Source=..." Microsoft.EntityFrameworkCore.SqlServer -UseDatabaseNames -Context SqlServerContext -StartupProject <...> -ContextDir Context -OutputDir Model -Tables <...>

更新:我收到一条有用的消息,说明DbContext.t4文件中的错误,但只有上面提到的EntityType.t4中的错误的一般错误。

实体框架核心 T4

评论


答:

2赞 bricelam 5/6/2023 #1

调试模板的最简单方法是在模板运行时使用实时调试器。

<#@ template debug="true" #>
<#
    System.Diagnostics.Debugger.Launch();
#>

附加调试器后,应该能够向模板代码添加断点、计算局部变量等。

该部件告诉 T4 保留更多信息,以获得更好的调试体验。debug="true"