NET COM DLL找不到依赖DLL

时间:2014-04-02 23:58:09

标签: com com-interop gac

我需要为.NET API dll创建一个COM包装器,以便在MS Access中使用它。 我需要创建COM包装器的.NET API DLL使用Newtonsoft.Json.dll

所以我让他关注DLL&#39>

  1. my.dll(支持COM的DLL暴露了COM客户端中使用的几种方法 - MS Access)
  2. api.dll - 暴露我需要在MS Access中访问的API的本机.NET DLL
  3. newtonsoft.json.dll - 由api.dll使用
  4. 当我从COM客户端(MS Access)调用my.dll中的方法(调用api.dll中的方法)时出现错误

    Could not load file or assembly Newtonsoft.Json.dll (blah blah) or one of its dependences. The system cannot find the file specified
    

    我尝试在system.32中将Newtonsoft.dll和api.dll复制到MS Access文件夹中与Access MDB相同的文件夹中。没有任何效果。

    我尝试使用

    将Newtonsoft添加到GAC
    gacutil /i newtonsoft.json.dll
    

    显然有效,回应是

    Assembly successfully added to the cache
    

    但是当我试图用

    检查它是否存在时
    gacutil /l newtonsoft.json.dll
    

    我收到消息:项目数= 0,显然它没有被添加到GAC

    无论如何,有任何建议让这项工作?

    由于

1 个答案:

答案 0 :(得分:0)

我发现并解决了这个问题。 在仔细检查错误消息时,我注意到它说它无法加载Newtonsoft.Json.dll版本4.5.0 但是,在我的项目中,我使用的是NewtonSoft的nuget包,版本为6.0.2

这导致我检查了api.dll构建的NewtonSoft的实际版本。

幸运的是我可以访问api dll源代码,我注意到它是针对旧版本的Newtonsoft,4.5.0 for NET 3.5构建的

即使有用于定义版本重定向的dll的app.config,当从COM客户端 - MS Access访问启用COM的DLL时,它似乎也无效。

但是在我重建api.dll以使用实际当前版本的NewtonSoft dll之后,所有内容都开始在COM调用中正常工作