使用COM调用者引用引用

Dav*_*ten 13 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#库引用的版本不同的库)时,它自己的黑盒代码中的依赖库会爆炸

错误:

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.
Run Code Online (Sandbox Code Playgroud)

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

值得注意的是,在Newtonsoft.Json的情况下,降级到6.0.4不是一个修复,因为在我们使用的各种包中有多个对Json.Net的引用,所以我没有权力只选择一个版.

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

任何帮助表示赞赏!谢谢.

小智 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>
Run Code Online (Sandbox Code Playgroud)

就你而言,我相信exe名称将是“msaccess.exe”或类似的名称。