You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:23:31