VS2017 15.7.1多项目tsconfig引用失效,VS Code却正常?
问题分析与解决方案
这种情况大概率不是Visual Studio的Bug,而是VS2017 15.7.1对TypeScript配置的处理逻辑和VS Code存在差异,结合你的场景,我整理了几个排查和解决方向:
1. 检查TypeScript版本一致性
VS2017 15.7.1默认集成的TypeScript版本是2.7.x左右,而VS Code通常会使用你全局安装或项目本地安装的更高版本TS(比如3.x+)。不同版本的TS对tsconfig.json的include规则解析可能有差异。
- 操作步骤:
- 在VS2017中,依次点击工具 > 选项 > 文本编辑器 > TypeScript > 项目 > 常规,查看"使用TypeScript版本"是否和VS Code中使用的版本一致;
- 如果不一致,可以尝试在Project B中安装对应版本的TypeScript包(
npm install typescript@xxx --save-dev),然后在VS2017的项目属性(右键Project B > 属性 > TypeScript构建)中选择"使用本地安装的TypeScript版本"。
2. 确认VS2017是否正确识别了tsconfig.json
VS2017对项目中tsconfig的识别有时需要手动关联:
- 右键Project B,选择添加 > 现有项,找到你的
tsconfig.json并添加到项目中; - 打开项目属性(右键Project B > 属性 > TypeScript构建),确认"配置文件"选项已设置为你的
tsconfig.json路径,而非"使用默认配置"。
3. 验证相对路径的准确性
虽然你的include路径看起来正确,但VS2017的项目结构可能和磁盘实际路径存在映射差异(比如项目嵌套、虚拟目录等):
- 尝试将相对路径替换为绝对路径测试(比如
"C:/YourSolutionPath/ProjectA/angular.d.ts"),如果能正常识别,说明原相对路径存在问题; - 更推荐的做法是利用
tsconfig.json的baseUrl和paths来配置别名,避免相对路径出错:
然后在file.ts中可以通过{ "compilerOptions": { "baseUrl": ".", "paths": { "@angular-types": ["../ProjectA/angular.d.ts"] } }, "include": [ "**/*.ts" ] }/// <reference path="@angular-types" />来引用(旧版TS可能需要显式引用才能识别全局命名空间)。
4. 显式引用全局声明文件
如果angular.d.ts中定义的是全局命名空间,旧版TypeScript可能不会自动加载include中的全局声明,需要在Project B的file.ts顶部添加显式引用:
/// <reference path="../ProjectA/angular.d.ts" />
添加后再尝试调用angular命名空间,看是否能正常识别。
5. 清理VS缓存并重新加载项目
VS2017有时会缓存旧的TypeScript类型信息,导致配置变更不生效:
- 关闭VS2017,删除解决方案目录下的
.vs文件夹、各个项目的bin和obj目录; - 重新打开解决方案,等待项目加载完成后再测试。
内容的提问来源于stack exchange,提问作者takvor
相关产品推荐
相关产品推荐

