VS2017中TypeScript编译器路径选项不被MSBuild支持的解决方案问询
解决VS2017 MSBuild不支持tsconfig.json paths的可行方案
我之前也踩过VS2017里MSBuild不认tsconfig.json中paths配置的坑,试了几个实用的方案,都能解决问题,分享给你:
1. 用tsconfig-paths+自定义构建脚本接管编译
这是我当时最常用的方案,灵活性很高:
- 先装依赖:
npm install tsconfig-paths --save-dev - 在项目根目录写个简单的Node脚本(比如
build-ts.js),用tsconfig-paths先解析路径,再调用TypeScript编译:const tsConfigPaths = require('tsconfig-paths'); const { execSync } = require('child_process'); // 读取tsconfig配置并注册路径映射 const tsConfig = require('./tsconfig.json'); tsConfigPaths.register({ baseUrl: tsConfig.compilerOptions.baseUrl, paths: tsConfig.compilerOptions.paths }); // 调用tsc编译,此时路径别名已经能被正确解析 execSync('tsc', { stdio: 'inherit' }); - 最后修改项目文件(
.csproj/.vbproj),替换默认的TypeScript编译任务,改成执行这个脚本:<Target Name="CompileTypeScript" BeforeTargets="Build"> <Exec Command="node build-ts.js" /> </Target>
这样既保留了MSBuild的构建流程,又让路径别名生效。
2. 手动在MSBuild中配置路径映射
如果不想引入Node依赖,可以直接在项目文件里手动同步paths配置:
- 打开你的项目文件,添加以下配置(对应tsconfig里的
baseUrl和paths):<PropertyGroup> <!-- 对应tsconfig中的baseUrl --> <TypeScriptBaseUrl>./src</TypeScriptBaseUrl> </PropertyGroup> <ItemGroup> <!-- 对应tsconfig中的"@/*": ["src/*"] --> <TypeScriptPathMapping Include="@/*"> <Target>src/*</Target> </TypeScriptPathMapping> <!-- 其他路径别名依次添加 --> </ItemGroup>
⚠️ 注意:这个方案需要你手动同步tsconfig和MSBuild的配置,一旦paths有修改,两边都要改,容易漏,但胜在轻量。
3. 用typescript-transform-paths编译时替换路径
这个工具能在编译阶段把路径别名直接替换成实际相对路径,让MSBuild无需处理别名:
- 安装依赖:
npm install typescript-transform-paths ttypescript --save-dev - 修改tsconfig.json,添加transform插件:
{ "compilerOptions": { "baseUrl": "./", "paths": { "@/*": ["src/*"] }, "plugins": [ { "transform": "typescript-transform-paths" } ] } } - 在项目文件中配置使用
ttypescript(支持自定义transform的TypeScript分支)编译:<PropertyGroup> <TypeScriptCompilerPath>node_modules/.bin/ttypescript</TypeScriptCompilerPath> </PropertyGroup>
编译后的JS文件里都是实际的相对路径,MSBuild就能正常处理了。
4. 升级VS版本(可选)
如果项目允许的话,直接升级到VS2019及以上版本,官方已经在后续版本中修复了MSBuild对paths的支持问题,这是最省心的办法。但如果必须留在VS2017,前面三个方案更合适。
内容的提问来源于stack exchange,提问作者laymanje
相关产品推荐
相关产品推荐

