【问题标题】:References of References with COM caller [duplicate]COM调用者的参考文献[重复]
【发布时间】:2016-12-15 13:55:38
【问题描述】:

我有这样一个场景:

  1. 使用 VBA 从 MS Access 应用程序调用 COM
  2. 调用到我们正在构建的 C# 库中,该库引用了 Newtonsoft.Json v9
  3. 库使用 nuget 包和它们自己的 Newtonsoft.Json v6 依赖项(例如,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.

我希望我需要像您在 .Net 中使用的那样的dependentAssembly 重定向绑定来指示如何解决这些类型的事情,但我没有通过搜索找到任何可以告诉我可能需要去哪里的东西以便 COM 中引用的程序集将其拾取。

值得注意的是,在 Newtonsoft.Json 的情况下,降级到 6.0.4 并不能解决问题,因为在我们使用的各种包中有多个对 Json.Net 的引用,所以我无权只需选择一个版本。

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

感谢任何帮助!谢谢。

【问题讨论】:

  • 如果我能做些什么来澄清这个问题,请告诉我。
  • @HansPassant 感谢您的链接
  • 将该程序集复制到您的 bin 文件夹并引用它。或在您的参考属性中允许“复制到本地”。
  • @krishKM 它们都放在那里并设置为本地复制。挑战在于,当通过 COM 类型库时,引用中的引用版本不尊重依赖的程序集配置,因此正在寻找不同版本的 json dll。

标签: c# vba ms-access com


【解决方案1】:

我为此类问题找到的一种解决方法是在调用 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”或类似的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多