.NET Core 2.0程序集搭配T4模板加载System.Runtime失败求助
解决T4模板引用.NET Core程序集时System.Runtime加载失败的问题
我之前也碰到过一模一样的坑,核心问题在于T4模板默认是运行在.NET Framework环境下的,而你写的Project.CodeGen是针对netcoreapp2.0编译的,两者的依赖体系不兼容,才会出现找不到System.Runtime 4.2.0.0的错误。下面给你具体的解决步骤:
1. 将类库目标框架改为netstandard2.0
把Project.CodeGen的项目文件里的目标框架从netcoreapp2.0改成netstandard2.0——这是关键!因为netstandard是跨.NET平台的类库标准,能同时被.NET Framework和.NET Core兼容,T4模板的运行环境(.NET Framework)可以正确识别它的依赖链。
修改后的项目文件片段大概是这样:
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup>
2. 更新T4模板的程序集引用路径
把模板里的引用路径改成netstandard2.0的输出目录:
<#@ assembly name="$(SolutionDir)Project.CodeGen\bin\Debug\netstandard2.0\Project.CodeGen.dll" #> <#@ import namespace="Project.CodeGen" #>
3. 清理并重新生成解决方案
先清理Project.CodeGen的输出目录,然后重新生成类库,再保存T4模板触发转换——这一步能避免旧的编译文件干扰。
额外注意点
- 别手动给T4模板加
System.Runtime的引用!当你用netstandard类库时,依赖会自动被解析,手动添加反而可能引发版本冲突。 - 确保你的Visual Studio安装了.NET Standard 2.0的SDK(一般最新版VS都会自带,如果没有的话可以补装对应版本的SDK)。
这样操作之后,T4模板应该就能正常实例化CodeGenHelper类了。
内容的提问来源于stack exchange,提问作者Steve Stokes
相关产品推荐
相关产品推荐

