我有一个WPF应用程序,它使用第三方库来执行特定任务;该库在其中一个方法中执行语句Assembly.GetEntryAssembly()
。
如果我在调试时运行WPF应用程序(通过运行.Net exe进行测试),库正常工作,Assembly.GetEntryAssembly()
返回对可执行文件程序集的引用,但在生产中我有不同的情况,给我带来了一些问题。
在生产中,WPF应用程序与VB6应用程序集成,程序使用InteropFormLibrary
从VB6菜单启动;在这种情况下,库会引发异常,因为Assembly.GetEntryAssembly()
返回null
(它找不到与程序集关联的可执行文件)。
我的问题是我无法更改库的代码,因为我没有可用的源代码,我找到了dll
反编译器抛出异常并分析其中的方法的语句异常。
现在我的问题是:有没有办法确保方法GetEntryAssembly
不会返回null
?我能以某种方式分配或“规避”吗?
答案 0 :(得分:1)
最简单的方法是让dll的开发人员修复他的代码,以支持在本机(如VB6或C / C ++)进程中托管。
也就是说,如果它不可能,你可以尝试在一个单独的进程中托管你的.NET,基于.NET exe。由于您正在使用VB6互操作,因此您可能已经在使用COM互操作,因此您可以切换到进程外COM模型。这样,您的.NET组件可以在.NET exe中运行并具有入口点程序集。我已经因为类似的原因这样做了,它对我来说很好。