ASP.NET项目Model.tt运行转换时System.NullReferenceException错误求助
解决EF6 T4模板(Model.tt)空引用编译错误
检查.edmx文件有效性
- 右键.edmx文件,选「打开方式」→「XML(文本)编辑器」,排查是否有XML格式错误(比如未闭合标签、缺失命名空间),这类错误会导致T4模板读取元数据时触发空引用。
- 确认.edmx的「Custom Tool」属性值为
EntityModelCodeGenerator:右键.edmx→「属性」查看,若不对手动修改后保存,触发模板重新关联。
修复Model.tt与.edmx的关联
- 打开Model.tt,检查顶部是否存在
<#@ include file="EF6.Utility.CS.ttinclude" #>,且路径正确。该文件缺失或路径错误会导致模板无法加载EF工具类,引发空引用。 - 确认Model.tt里的
<#@ input type="Text" file="你的模型名.edmx" #>指向正确的.edmx文件,文件名和路径要完全匹配(包括大小写)。
清理后重新生成模板
- 删除Model.tt、Model.Context.tt生成的所有.cs文件(包括你手动复制的Model.cs),右键Model.tt→「运行自定义工具」,让模板重新生成代码——手动复制的代码可能和当前.edmx元数据不匹配,反而干扰模板运行。
- 执行「生成」→「清理解决方案」,再「生成解决方案」,清除旧编译缓存。
检查EF6版本兼容性
- 确认项目中EntityFramework NuGet包是6.x版本,且与.NET Framework 4.x兼容(EF6最低支持.NET 4.0)。版本不匹配的话,卸载后重装对应版本:
Uninstall-Package EntityFramework Install-Package EntityFramework -Version 6.4.4
进阶:调试T4模板
- 若以上方法无效,修改Model.tt第一行为
<#@ template language="C#" debug="true" hostspecific="true"#>,右键Model.tt→「调试T4模板」,启动VS调试器跟踪空引用的具体触发位置,定位哪行代码访问了null对象。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

