Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# COM调用方的引用的引用_C#_Vba_Ms Access_Com - Fatal编程技术网

C# COM调用方的引用的引用

C# COM调用方的引用的引用,c#,vba,ms-access,com,C#,Vba,Ms Access,Com,我有这样一个场景: 使用VBA从MS Access应用程序进行COM调用 调用进入我们正在构建的一个C#库,该库引用了Newtonsoft.jsonv9 库使用nuget软件包,这些软件包具有自己的Newtonsoft.jsonv6依赖项(例如,Microsoft.AspNet.WebApi.Client) 当他们试图使用Newtonsoft.Json(或任何与我们的C#库引用的版本不同的库)时,它自己的黑盒代码中的依赖库就会爆炸 错误: Could not load file or assem

我有这样一个场景:

  • 使用VBA从MS Access应用程序进行COM调用
  • 调用进入我们正在构建的一个C#库,该库引用了Newtonsoft.jsonv9
  • 库使用nuget软件包,这些软件包具有自己的Newtonsoft.jsonv6依赖项(例如,Microsoft.AspNet.WebApi.Client)
  • 当他们试图使用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.
    
    我希望我需要像dependentAssembly重定向绑定这样的东西,比如你在.Net中使用的东西,来指示如何解决这些类型的问题,但是我在搜索中没有找到任何东西告诉我COM中引用的程序集可能需要到哪里去取它

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

    此外,在我们在库开发过程中使用的.NETTester应用程序中,所有内容都按预期工作,并且引用自行确定使用正确的版本。所以我相信我需要弄清楚如何告诉COM找到它想要的东西


    感谢您的帮助!谢谢。

    我发现解决这类问题的一个方法是在调用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”或类似的名称。

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