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

非托管C++通过COM互调C# DLL调用SharePoint CSOM返回ERROR_FILE_NOT_FOUND

解决方案:非托管C++调用含SharePoint CSOM的C# COM组件返回ERROR_FILE_NOT_FOUND

这个问题的核心是非托管C++进程无法自动定位SharePoint CSOM的依赖库,而C#测试程序依托NuGet的依赖管理机制能正确加载这些组件。以下是针对性的解决步骤:

1. 复制CSOM依赖库到C++程序目录

C#项目编译时,若将CSOM相关DLL的复制本地属性设为True,这些文件会输出到C# DLL的编译目录。需要把以下核心DLL复制到C++可执行文件的同一目录下:

  • Microsoft.SharePoint.Client.dll
  • Microsoft.SharePoint.Client.Runtime.dll
  • 其他CSOM相关的依赖DLL(如Microsoft.SharePoint.Client.Publishing.dll等,根据你的使用情况添加)

设置"复制本地"的方法:在C#项目的引用中找到这些CSOM组件,右键→属性,将"复制本地"改为True。

2. 添加C++程序的应用程序配置文件

创建与C可执行文件同名的.config文件(例如你的C程序是MyCppApp.exe,则配置文件名为MyCppApp.exe.config),添加.NET程序集绑定重定向,确保C++进程能找到正确版本的CSOM组件。示例配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.SharePoint.Client" 
                          publicKeyToken="71e9bce111e9429c" 
                          culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-16.0.0.0" 
                         newVersion="16.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.SharePoint.Client.Runtime" 
                          publicKeyToken="71e9bce111e9429c" 
                          culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-16.0.0.0" 
                         newVersion="16.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

注意:newVersion的值要与你安装的SharePoint Online CSOM包版本一致,可以在NuGet包管理器中查看具体版本号。

3. 匹配平台与.NET运行时环境

  • 确保C++项目的目标平台(x86/x64)与C# DLL的目标平台完全一致,避免因位数不匹配导致的组件加载失败。
  • 确认运行C++程序的机器已安装对应版本的.NET Framework(SharePoint Online CSOM通常要求.NET Framework 4.6.1及以上版本)。

4. 用Fusion日志排查具体加载失败的组件

若上述方法仍未解决问题,可以开启.NET Fusion日志查看具体是哪个组件加载失败:

  1. 以管理员身份打开命令提示符,执行以下命令:
    reg add HKLM\Software\Microsoft\Fusion /v EnableLog /t REG_DWORD /d 1 /v LogPath /t REG_SZ /d C:\FusionLogs
    
  2. 创建C:\FusionLogs目录(如果不存在)。
  3. 运行你的C++程序,触发错误后,查看C:\FusionLogs下的日志文件,定位到具体找不到的DLL,再针对性处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:57:43