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

GitHub Actions中使用Text Transform(.tt)模板构建失败如何解决

问题根因

报错核心是构建时使用的MSBuild运行环境不匹配:

  • 你执行的dotnet build命令调用的是.NET SDK自带的、运行在.NET 6环境下的MSBuild,该版本默认不会探测.NET Framework的全局程序集缓存(GAC)。
  • Visual Studio自带的TextTemplating构建任务依赖.NET Framework WPF组件WindowsBase中的System.Windows.DependencyObject类型,即使GitHub Actions运行器预装了VS2022、相关程序集已经存在于GAC中,.NET环境下的MSBuild也无法加载这类.NET Framework专属程序集,最终抛出TypeLoadException。
  • 本地Visual Studio中构建正常,是因为VS默认调用自身附带的、运行在.NET Framework环境下的完整版MSBuild,会自动完成GAC依赖探测。
解决方案

按稳定性和适配性排序,可选择以下任意一种方案:

方案1:替换构建命令为VS自带MSBuild(推荐,零额外配置)

这是和本地Visual Studio构建行为完全一致的方案,不需要修改现有项目文件配置:
GitHub Actions Windows运行器自带vswhere工具可自动定位VS2022安装路径,无需硬编码MSBuild位置,将原有构建步骤替换为以下命令即可:

# 定位VS2022下的MSBuild.exe
$msbuildPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" `
  -version "[17.0,18.0)" `
  -requires Microsoft.Component.MSBuild `
  -find "MSBuild\**\Bin\MSBuild.exe" `
  | Select-Object -First 1

# 执行构建,无需额外传入CustomPathToTransforms参数
& $msbuildPath Grunt.sln /p:Configuration=Release /restore

该方案下你之前手动添加的CustomPathToTransforms配置可以直接删除:VS自带MSBuild的$(MSBuildExtensionsPath)变量默认就指向VS安装目录下的MSBuild路径,不会出现路径匹配错误的问题,同时运行在.NET Framework环境下可自动加载GAC中的WPF相关依赖,T4转换任务可正常执行。

方案2:替换为跨平台T4 SDK(适配后续跨平台构建需求)

如果你需要实现真正的跨平台构建,不想依赖Windows专属的Visual Studio环境,可以替换项目依赖的T4构建组件,移除对VS预装目标文件的依赖:

  1. 删除项目文件中手动导入Microsoft.TextTemplating.targets的配置段,以及TransformOnBuild、TransformOutOfDateOnly、CustomPathToTransforms相关的自定义属性配置
  2. 添加跨平台T4 SDK的NuGet包引用:
<PackageReference Include="Microsoft.VisualStudio.TextTemplating.Sdk" Version="17.0.0" PrivateAssets="all" />

该SDK自带的构建任务不依赖WPF和.NET Framework组件,dotnet build命令可直接在Windows、Linux、macOS环境下正常执行T4模板转换,不需要预装Visual Studio。
注意:如果你的.tt模板本身调用了Windows/VS专属API(如EnvDTE自动化接口、Windows系统组件),该方案无法兼容,请使用方案1。

方案3:临时兼容方案(不推荐长期使用)

如果必须使用dotnet build命令且暂时无法修改项目依赖,可以在构建命令中手动添加.NET Framework GAC路径作为程序集探测目录,该方案兼容性差,随.NET SDK或VS版本更新可能失效:

dotnet build --configuration Release `
  -p:CustomPathToTransforms="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\" `
  -p:PROBING_PATH="C:\Windows\Microsoft.NET\assembly\GAC_MSIL"

内容的提问来源于stack exchange,提问作者Den

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:30:49