c# - T4 抑制错误消息 "ErrorGeneratingOutput"

标签 c# .net templates t4

我正在使用一组 T4 脚本为我在 EF 应用程序中的实体生成部分类。

因为部分类需要驻留在同一个程序集中,所以脚本与实体类驻留在同一个项目中。它还需要在执行时访问已编译的程序集。

当发生错误时,脚本将失败并输出“ErrorGeneratingOutput”。这将导致整个项目无法编译,因为生成的文件是一个 .cs 文件,具有(在那个时间点)无效的内容。

所以这是一个恶性依赖循环,只有我手动从生成的文件中删除错误消息,然后触发构建才能打破它。

如果有一种方法可以抑制错误消息(或用空字符串替换它),我的生活就会轻松得多。

所以问题是:我可以更改 t4 脚本的错误处理吗?

最佳答案

在某些情况下,这个问题可以很容易地解决。

在我的例子中,问题在于加载 T4 脚本所在项目的 DLL。汇编指令位于脚本的顶部区域(第 5 行)。所以我将输出扩展名更改为 txt。

<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="txt" #>
<#@assembly name="invalidAssemblyName"#>

然后我使用 EntityFrameworkFileManager 将实际输出放入另一个文件。

<#@ include file="EF.Utility.CS.ttinclude"#>
<#
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
fileManager.StartHeader();
fileManager.StartNewFile("Output.cs");
#>
//content
<#
fileManager.Process();
#>

当发生无法加载程序集的错误时,ErrorGeneratingOutput 消息会打印到默认的 .txt 文件中,不会对编译产生问题。如果可以加载程序集,输出将打印到 Output.cs 文件。

这样就可以在修复初始问题后构建项目,开发人员也不必关心 ErrorGeneratingOutput 问题。

关于c# - T4 抑制错误消息 "ErrorGeneratingOutput",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134809/

相关文章:

c# - GUI GroupPanel 鼠标事件

javascript - 我可以在文件类型输入中显示文件大小吗?

c++ - 我无法使用模板编译此代码

c# - 双多维数组,在C++中,最好的方法

c# - Xamarin MVVM 按钮绑定(bind)到命令不起作用

c# - 简单的 asp.net 标记帮助器列表 <> 问题

html - Go 模板中的排序映射迭代?

c# - .Net 4.0 上的 ServiceStack.Text JSON 解析

.net - OCR 文档扫描 .NET SDK

javascript - 在 Node/Express 中使用 Pug 模板引擎进行动态模板渲染