.NET 托管程序集如何解析其引用本机程序集/GAC

问题描述

发现一个非常奇怪的情况,所以寻求解释:

System.Fabric.dll is managed assembly provided by Azure's Service Fabric.

Fabricclient.dll is native assembly on which System.Fabric.dll relies. 

managed refering native

SystemFabric 运行时在 8.0 版的 VM 上运行。它已将 System.Fabric.dll 注册到与 8.0 版本相同的 GAC 中。与此版本一起,还注册PublisherPolicy.7.0,它将 VM 上的所有 7.0 System.Fabric 查找从 GAC 重定向到 8.0 版本。

在使用 System.Fabric.dll 7.0 版本编译的 VM 上执行 test.exe(Fabricclient.dll 和 System.Fabric.dll 与此 test.exe 一起提供),并开始遇到互操作 COM InvalidCastException .

使用procmon调试*.dll冲突的原因,发现由于发布者政策,System.Fabric.dll与来自GAC的8.0版本一起使用,但Fabricclient.dll是从test.exe所在的本地目录使用的.

到目前为止,我知道 .NET 使用以下方法解析托管程序集:

clr resolve

但是 Windows 用于解析本机程序集的方法是什么?

此外,如果托管程序集因政策而从 GAC 重用,则其配对本机 dll 不会从 windows 子目录中重用。 (IIRC 我已经看到 Fabricclient.dll 8.0 在 Windows 目录中注册

好像Windows首先在test.exe所在的同一目录中查找本机dll?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)