1

这是我当前的部署方案:

  • 客户端应用程序部署在文件夹 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,因此我也将感谢有关“解析程序例程”解决方案的评论。这是人们经常做的事情,还是出于某种原因应该避免的异国情调?

4

1 回答 1

1

在我看来,你所说的“解析程序”是最好的解决方案。由于您的程序集已加载到默认上下文中,因此搜索路径包含客户端应用程序的当前文件夹,而不是程序集的文件夹。阅读本文,这是使用 AppDomain.AssemblyResolve 事件的典型案例。我想您可以将您的程序集加载到自定义上下文中,但这对我来说听起来有点太多(只是我的两美分)

我希望这有帮助

于 2013-05-28T04:54:50.880 回答