在 Rider 的 T4 模板中使用 net5.0

Posted

技术标签:

【中文标题】在 Rider 的 T4 模板中使用 net5.0【英文标题】:Using net5.0 in T4 templates in Rider 【发布时间】:2021-06-20 05:07:23 【问题描述】:

我对@9​​87654321@、netframeworknetX 之间的兼容性以及单声道如何适应图片有点困惑...

我了解 Rider 的 T4 引擎在单声道上运行,但这是否意味着我不能在 T4 模板中使用 net5.0 程序集?

目前,我有一个 net5.0 项目,引用 net5.0 nuget 程序集。

在我的 T4 模板中,我使用 `

引用 bin/Debug/net5.0 中的程序集 DLL

当我通过 Mono.TextTemplating.TemplateGenerator.TemplateGeneratornet5.0 控制台应用程序中运行T4 模板时,模板可以工作。

但是,如果我在解决方案资源管理器中右键单击模板并选择“运行模板”,则会得到核心 System.* 库缺失的错误列表,例如

  Generate.tt(21, 25): [CS0012] The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

这是 Rider 中的错误吗?

【问题讨论】:

【参考方案1】:

由于实现细节,Rider 编译针对 .NET Framework 版本的 T4 文件,这就是它在引用 net5.0 程序集的文件时出现问题的原因。据我了解我在Mono.TextTemplating 中看到的内容,它们以启动它们的运行时为目标。为了解决您的问题,我建议尝试将 Mono.TextTemplating 作为命令行工具 - 它可能能够编译带有 net5.0 引用的文件。要将外部工具集成到 Rider,您可以转到 File > Settings > Tools > Custom Tools,禁用 Bundled T4 Template Executor 并为 Mono.TextTemplating CLT 添加自定义工具。

回答你的问题:是的,它可能可以称为错误

【讨论】:

谢谢!将在 JetBrains 的问题跟踪器中继续对话:youtrack.jetbrains.com/issue/RIDER-60238

以上是关于在 Rider 的 T4 模板中使用 net5.0的主要内容,如果未能解决你的问题,请参考以下文章

如何在 T4 模板中使用 DbContext?

“)预期”在 c# 中使用 t4 文本模板

有啥方法可以在基本 T4 模板中具有功能吗?

如何查看作为参数传递到 Rider 中的模板的类?

T4 模板

在 T4 文本模板中调用异步方法?