VS2022中TT模板CLI执行报错CS0103:s_data未在当前上下文定义
问题解决:命令行运行TextTransform无法识别分部类中的
s_data 核心原因
Visual Studio的「运行自定义工具」是在项目上下文中执行模板转换,会自动包含项目中所有已编译的代码、依赖项,因此能识别到和模板关联的分部类。而命令行下的TextTransform.exe/TextTransformCore.exe是独立进程运行,默认仅加载系统程序集和模板中显式声明引用的程序集,不会自动关联项目中的分部类代码,导致找不到s_data。
解决方案步骤
1. 先编译包含分部类的项目
先在Visual Studio中编译你的项目,生成包含SideNavTemplate分部类和MenuItem等类型的程序集(通常路径为bin/Debug/[TargetFramework]/Excelerator.Models.dll,具体路径根据项目配置调整)。
2. 修改.tt文件,添加程序集引用和命名空间导入
在SideNavTemplate.tt的开头添加以下指令,引用编译好的程序集并导入对应命名空间:
<#@ template language="C#" #> <#@ assembly name="System.Core" #> <#@ assembly name="Excelerator.Models.dll" #> <!-- 替换为你的dll实际路径,绝对路径或相对路径均可 --> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ import namespace="Excelerator.Models" #> <!-- 导入分部类所在的命名空间 -->
如果dll不在当前命令行工作目录,建议使用绝对路径,示例:
<#@ assembly name="C:\Projects\Excelerator\bin\Debug\net6.0\Excelerator.Models.dll" #>
3. 命令行运行TextTransform的正确方式
切换到.tt文件所在目录,执行对应命令:
# .NET Framework环境使用TextTransform.exe,路径通常在VS安装目录下: & "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\TextTransform.exe" SideNavTemplate.tt # .NET Core/.NET 5+环境使用TextTransformCore.exe: TextTransformCore.exe SideNavTemplate.tt
额外注意事项
- 若项目基于.NET Core/.NET 5+,优先使用
TextTransformCore.exe,并确保引用的dll是对应目标框架的版本。 - 每次修改分部类代码后,必须重新编译项目更新dll,否则命令行转换会使用旧版本的代码。
内容的提问来源于stack exchange,提问作者Naish O'Loughlin
相关产品推荐
相关产品推荐

