VS2019+.NET5.0环境T4模板运行缺System.Runtime 5.0.0.0如何解决?
T4模板加载.NET 5程序集System.Runtime报错解决方案
核心原因
VS 2019 内置的 T4 模板执行引擎基于 .NET Framework 运行,默认无法直接识别 .NET 5 编译的程序集依赖,两次报错本质都是引擎找不到 .NET 5 版本的 System.Runtime 程序集引用。
可选解决方案
方案1:使用.NET 官方T4工具dotnet-t4(最适配.NET 5+,推荐)
- 全局安装dotnet-t4工具:
dotnet tool install -g dotnet-t4 - 确保Core.Common项目已完成编译生成最新的Common.dll
- 命令行执行模板生成SQL文件:
t4 你的模板文件名.tt -o 输出的SQL文件名.sql
该方案完全避开.NET Framework引擎的兼容问题,运行稳定。
方案2:模板显式引用.NET 5的System.Runtime程序集(适合需要在VS内直接运行模板的场景)
- 找到本地.NET 5引用包的System.Runtime.dll路径,默认路径为:
C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\5.0.0\ref\net5.0\System.Runtime.dll - 在T4模板最顶部添加显式引用:
<#@ assembly name="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\5.0.0\ref\net5.0\System.Runtime.dll" #>
- 如需适配团队不同环境,可替换为基于NuGet包路径的通用写法:
<#@ assembly name="$(NuGetPackageRoot)microsoft.netcore.app.ref\5.0.0\ref\net5.0\System.Runtime.dll" #>
添加后即可解决编译阶段找不到Enum类型的报错。
方案3:枚举项目改为多目标框架(兼容性最好)
- 打开Core.Common项目的.csproj文件,将单目标框架配置:
<TargetFramework>net5.0</TargetFramework>
修改为多目标框架配置:<TargetFrameworks>net5.0;netstandard2.0</TargetFrameworks> - 重新编译Core.Common项目,修改T4模板的程序集引用路径为netstandard2.0的输出目录:
<#@ assembly name="$(ProjectDir)..\Core.Common\bin\Debug\netstandard2.0\Common.dll" #>
.NET Framework的T4引擎可以正常加载netstandard2.0的程序集,无依赖冲突问题。
注意事项
- 每次修改EnumDictionaries枚举后,需先编译Core.Common项目再运行T4模板,避免加载旧版本程序集
- VS 2022已内置对.NET Core/.NET 5+ T4模板的原生支持,升级VS版本也可直接解决该兼容问题
内容的提问来源于stack exchange,提问作者titan
相关产品推荐
相关产品推荐

