使用COM调用者引用引用

时间:2016-08-09 13:25:07

标签: c# com access-vba

我有这样的场景:

  1. 使用VBA从MS Access应用程序调用COM
  2. 调用我们正在构建的C#库,其中引用了Newtonsoft.Json v9
  3. 库使用具有自己的Newtonsoft.Json v6依赖项的nuget包(Say,Microsoft.AspNet.WebApi.Client)
  4. 当他们尝试使用Newtonsoft.Json(或任何与我们的C#库引用的版本不同的库)时,其中的依赖库自己的黑盒代码爆炸了。
  5. 错误:

    Could not load file or assembly 'Newtonsoft.Json, Version=6.0.4.0, Culture=neutral, 
    PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. 
    The system cannot find the file specified.
    

    我希望我需要类似dependentAssembly重定向绑定的地方,就像你在.Net中使用的那样,以指示如何解决这些类型的事情,但我通过搜索找不到任何东西,告诉我哪里可能需要在COM中引用引用的程序集来获取它。

    值得注意的是,在Newtonsoft.Json的情况下,降级到6.0.4并不能解决,因为在我们使用的各种软件包中有多个Json.Net的引用,所以我没有#&# 39;有权选择一个版本。

    此外,在我们在库开发过程中使用的.Net测试器应用程序中,一切都按预期工作,并且参考文献自己使用正确的版本。所以我相信我需要弄清楚如何告诉COM找到它想要的东西。

    任何帮助表示赞赏!感谢。

1 个答案:

答案 0 :(得分:0)

我发现这种问题的一个解决方法是在调用c#代码的可执行文件的同一路径中包含一个配置文件。

我发现,如果我创建一个名为“myapp.exe”的VB6应用程序,我可以在“myapp.exe”的同一文件夹中创建一个名为“myapp.exe.config”的文本文件,其中包含以下内容:内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

在你的情况下,我相信exe名称将是“msaccess.exe”或类似的东西。