在Rider中添加NuGet包时出现MSB4019错误的解决咨询
- 环境:未使用npm,已安装Visual Studio 2022,使用Rider开发
- 项目结构:解决方案包含三个项目:原生C项目A、依赖A的C/CLI项目B(路径
D:\MyGitRepositories\MyRepository\B,包含B.vcxproj)、依赖B的C#项目C
执行dotnet add package Newtonsoft.Json命令添加NuGet包时,触发错误:
error MSB4019: The imported project "D:\Microsoft.Cpp.Default.props" was not found. Confirm that the expression in the Import declaration "\Microsoft.Cpp.Default.props" is correct, and that the file exists on disk.
推测原因
VCTargetsPath环境变量为空,该变量本应由IDE启动时自动填充(需匹配正确的MSBuild版本),但实际未配置;同时PATH环境变量中未包含MSBuild路径(本地已安装4个不同版本的MSBuild)。
已尝试的无效操作
- 此前在其他项目中通过调整Visual Studio工具安装解决过该问题(当时
Microsoft.Cpp.Default.props自动出现在项目文件夹),但此次无法复现该操作 - 使用
nuget install Newtonsoft.Json命令会在项目A中生成依赖文件夹,需提交到仓库,不符合预期,不是正确的包管理方式 - 确认
Microsoft.Cpp.Default.props存在于BuildTools和Visual Studio的MSBuild安装目录(ProgramFiles和ProgramFiles(x86)下,共4个官方安装版本)
复现步骤
- 使用VS或Rider创建C#控制台项目
- 向解决方案添加C++/CLI控制台项目
- 将C++/CLI项目设置为C#项目的依赖项
- 在C#项目根目录的终端执行
dotnet add package <anypackage>命令
方法1:使用Visual Studio开发人员命令提示符执行命令
打开Visual Studio 2022 开发人员命令提示符(从Windows开始菜单搜索即可找到),通过cd命令切换到C#项目C的根目录,再执行dotnet add package Newtonsoft.Json。
开发人员命令提示符会自动配置所有Visual Studio/MSBuild相关的环境变量(包括VCTargetsPath),无需手动设置,能直接解决路径缺失问题。
方法2:手动配置VCTargetsPath环境变量
- 找到Visual Studio 2022对应的VC目标文件路径,默认路径示例:
- 社区版64位:
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170 - 专业版/企业版可将路径中的
Community替换为Professional或Enterprise,若安装在其他盘符则对应修改前缀
- 社区版64位:
- 打开系统环境变量设置:右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」区域点击「新建」,变量名填
VCTargetsPath,变量值填第一步找到的路径 - 重启终端或Rider,再执行
dotnet add package命令
方法3:在Rider中指定正确的MSBuild版本
- 打开Rider的设置:
File > Settings(Windows/Linux)或Rider > Settings(Mac) - 导航到Build, Execution, Deployment > Toolset and Build
- 在MSBuild version下拉菜单中,选择Visual Studio 2022对应的MSBuild路径(通常位于
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe) - 点击「Apply」保存设置,重启Rider后尝试添加NuGet包
方法4:临时修改C++/CLI项目的vcxproj文件(不推荐长期使用)
打开B项目的B.vcxproj文件,找到导入Microsoft.Cpp.Default.props的行,将相对路径改为绝对路径,示例:
<Import Project="C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.Cpp.Default.props" />
注意:此方法会绑定特定的VS安装路径,团队协作或更换环境时容易出问题,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者Milan

