我们目前将ODBC驱动程序构建为4个DLL:
实现ODBC(C)API的DLL,大多数是用C ++实现的,带有一些用C ++ / CLI编写的“胶水”代码,用于与#2,#3和#4进行交互
包含一个托管程序集(用C#编写)的DLL,它定义了用于#1和#4相互通信的'基本'接口。
要部署驱动程序,我们将DSN配置为指向#1,然后将#2,#3和#4放入GAC。
我们有一个客户希望完全避免使用GAC。我知道将#2,#3和#4与加载#1'works'的应用程序放在同一目录中,但这不是一个好的解决方案,因为许多不同的应用程序可能会使用该驱动程序。
我们如何进行设置,以便无需GAC即可解决依赖关系?我曾尝试创建清单文件(基于https://docs.microsoft.com/en-us/windows/win32/sbscs/assembly-manifests),但似乎不起作用(引发EEFileLoadException异常,因为它找不到托管程序集,这与我从中删除依赖项后发生的情况相同。 GAC)。我将清单文件和所有的.DLL放入同一个目录。
我通过一些(也许还不够)谷歌搜索,找不到这种情况下的任何好的文档/示例。
我不确定我是否完全理解您的问题,但我会尽力回答:
在尝试解决此问题时,我们应记住以下几点:
基于这两点,您可以订阅AppDomain.AssemblyResolve Event。但是,您应该以这种方式重构代码,因此融合不会在您成功订阅之前尝试解析程序集。在处理程序中,仅处理正在解析YOUR程序集的事件,然后从所需的任何位置(例如,从本机库所在的路径)加载它们。