自建GitHub Windows Runner执行构建时遇MSB4226错误求助
解决方案:MSB4226 找不到 SSDT Targets 文件的问题
核心原因
你的.sqlproj项目默认引用了VS2019(v16.0)版本的SSDT目标文件,但自建Runner镜像安装的是VS2022 Build Tools(对应v17.0)的SSDT,路径不匹配导致报错。旧废弃镜像能成功是因为它可能配置了MSBuild版本兼容映射,或者通过环境变量让MSBuild自动定位到对应版本的SSDT。
无需修改.sqlproj的解决方法
1. 直接指定VS2022的MSBuild路径执行构建
在GitHub Actions构建步骤中,跳过默认的msbuild命令,直接调用VS2022 Build Tools自带的MSBuild,它会自动加载对应版本的SSDT:
& "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe" YourProject.sqlproj /t:Build /p:Configuration=Release
2. 在Docker镜像层面创建版本兼容符号链接(一次性解决)
在Dockerfile中添加创建 junction 链接的步骤,让MSBuild寻找的旧路径指向实际的VS2022 SSDT目录,后续所有构建无需额外配置:
# 安装完VS2022 Build Tools和SSDT后执行 RUN New-Item -ItemType Junction -Path "C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools" -Target "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" RUN New-Item -ItemType Junction -Path "C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\MSBuild\Microsoft\VisualStudio\v16.0\SSDT" -Target "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VisualStudio\v17.0\SSDT"
3. 使用VS开发者命令提示符初始化环境
调用VS2022的开发者命令提示符,它会自动配置所有必要的环境变量,包括SSDT的路径:
& "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat" && msbuild YourProject.sqlproj /t:Build /p:Configuration=Release
关于旧废弃镜像的疑问
旧镜像未报错的常见原因:
- 镜像中同时安装了VS2019和VS2022 Build Tools,MSBuild自动匹配了项目依赖的版本;
- 旧镜像配置了
MSBuildExtensionsPath或VCTargetsPath环境变量,覆盖了默认的版本检测逻辑; - 旧项目文件通过条件判断动态引用了对应版本的SSDT(可能是隐式配置未被注意)。
内容的提问来源于stack exchange,提问作者checkcomparemeerkat
相关产品推荐
相关产品推荐

