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
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的不同版本。