1

我有一个使用第三方库来执行特定任务的 WPF 应用程序;该库在其方法之一中执行语句Assembly.GetEntryAssembly()

如果我在调试时运行 WPF 应用程序(通过运行 .Net exe 进行测试),该库可以正常工作并Assembly.GetEntryAssembly()返回对可执行文件程序集的引用,但在生产中我遇到了不同的情况,这会导致我出现一些问题。

在生产中,WPF 应用程序与 VB6 应用程序集成在一起,程序从 VB6 菜单中使用InteropFormLibrary;在这种情况下,库会引发异常,因为Assembly.GetEntryAssembly()返回null(它找不到与程序集关联的可执行文件)。

我的问题是我无法更改库的代码,因为我没有可用的源代码,并且我通过dll反编译器找到了引发异常的语句并分析了异常中的方法。

现在我的问题是:有没有办法确保该方法GetEntryAssembly不返回null?我可以以某种方式分配或“规避”吗?

4

1 回答 1

1

最简单的方法是让 dll 的开发人员修复他的代码以支持在本机(如 VB6 或 C/C++)进程中托管。

也就是说,如果不可能,您可以尝试在一个单独的进程中托管您的 .NET 端,基于 .NET exe。由于您正在执行 VB6 互操作,您可能已经在使用 COM 互操作,因此您可以切换到进程外 COM 模型。这样,您的 .NET 组件可以在 .NET exe 中运行并具有入口点程序集。出于类似的原因,我已经这样做了,而且对我来说效果很好。

于 2012-04-13T09:19:22.020 回答