这是我当前的部署方案:
- 客户端应用程序部署在文件夹 A 中
- COM DLL、C++/CLI 包装器 DLL 和 .NET 程序集部署在文件夹 B
- DLL/程序集一起形成一个 SDK,客户端应用程序是第三方消费者
这就是它应该如何工作:
- 客户端应用程序启动并创建 COM 对象
- 客户端应用程序调用 COM 对象中的函数
- COM 对象将调用转发到 C++/CLI 包装 DLL
- C++/CLI 包装函数将调用转发到 .NET 程序集
问题:C++/CLI 包装器找不到 .NET 程序集,应用程序崩溃。
到目前为止我能想到的解决方案:
- 为 .NET 程序集提供一个强名称并将其部署到 GAC 而不是文件夹 B
- 为客户端应用程序提供一个 .config 文件并告诉它在文件夹 B 中查找程序集
- 将某种自定义“解析器例程”添加到动态加载 .NET 程序集的 C++/CLI 包装器(类似于此 SO answer)
由于各种原因,这些解决方案似乎都不是特别有吸引力。你知道如何解决这个问题的任何其他机制吗?理想的解决方案将在 SDK 端使用某种配置,但据我所知,不可能为程序集提供 .config 文件,是吗?
由于我不是特别精通 .NET,因此我也将感谢有关“解析程序例程”解决方案的评论。这是人们经常做的事情,还是出于某种原因应该避免的异国情调?