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

Visual Studio可跳转头文件但编译失败:找不到onnxruntime_cxx_api.h

重构Visual Studio解决方案后NuGet包头文件编译找不到,但IDE可定位的解决方法

问题背景

对Visual Studio解决方案进行文件系统重构后,将源码与VS项目文件分离为sources和vs_stuff目录,使用NuGet包Microsoft.ML.OnnxRuntime v1.12.0时出现编译错误:

Error  C1083   Cannot open include file: 'onnxruntime_cxx_api.h': No such file or directory

但IDE可通过Ctrl+左键点击或「转到文档」定位到该头文件,路径为$(SolutionDir)\packages\Microsoft.ML.OnnxRuntime.1.12.0\build\native\include\onnxruntime_cxx_api.h。

解决方案结构如下:

./solution/
    ./solution.sln
    ./packages/
        ./Microsoft.ML.OnnxRuntime.1.12.0/
            ...
    ./sources/
        ./projectA/
            项目A源码文件
        ./projectB/
            项目B源码文件
    ./vs_stuff/
        ./projectA/
            项目A的vcxproj、packages.config等VS文件
        ./projectB/
            项目B的vcxproj、packages.config等VS文件

核心原因

IDE的IntelliSense与编译器的路径查找逻辑不同:

  • IntelliSense通过NuGet包缓存、packages.config或解决方案级的包索引定位头文件
  • 编译时依赖项目vcxproj中的NuGet自动生成的.targets文件引用,重构后项目路径变化导致该引用的相对路径失效,无法自动添加包含目录

解决步骤

1. 检查vcxproj中的NuGet Targets引用

打开vs_stuff下项目的.vcxproj文件,查找是否存在类似以下的Import节点:

<Import Project="..\..\packages\Microsoft.ML.OnnxRuntime.1.12.0\build\native\Microsoft.ML.OnnxRuntime.targets" Condition="Exists('..\..\packages\Microsoft.ML.OnnxRuntime.1.12.0\build\native\Microsoft.ML.OnnxRuntime.targets')" />
  • 若相对路径错误(因重构后项目位置变化),将其修改为使用$(SolutionDir)的绝对引用,避免相对路径偏差:
<Import Project="$(SolutionDir)packages\Microsoft.ML.OnnxRuntime.1.12.0\build\native\Microsoft.ML.OnnxRuntime.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.ML.OnnxRuntime.1.12.0\build\native\Microsoft.ML.OnnxRuntime.targets')" />

2. 强制NuGet重新还原并重装包

  • 在Visual Studio中右键解决方案 → 「管理解决方案的NuGet程序包」,点击「还原」按钮
  • 或打开「包管理器控制台」,执行命令:
Update-Package -reinstall Microsoft.ML.OnnxRuntime

此操作会让NuGet重新生成适配当前项目路径的.targets文件及引用配置。

3. 清理重建解决方案

  • 执行「生成」→「清理解决方案」
  • 手动删除项目目录下的obj和bin文件夹
  • 重新执行「生成解决方案」,清除旧路径缓存的影响

4. 验证包含目录配置(可选)

若上述步骤无效,可检查项目属性的包含目录:

  • 右键项目 → 属性 → VC++目录 → 包含目录
  • 确认是否存在$(SolutionDir)packages\Microsoft.ML.OnnxRuntime.1.12.0\build\native\include,若缺失可手动添加(优先通过NuGet自动处理,此为兜底方案)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:53:20