Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetEntryAssembly返回null…如何避免它?_C#_Wpf_Vb.net_Vb6_Assemblies - Fatal编程技术网

C# GetEntryAssembly返回null…如何避免它?

C# GetEntryAssembly返回null…如何避免它?,c#,wpf,vb.net,vb6,assemblies,C#,Wpf,Vb.net,Vb6,Assemblies,我有一个WPF应用程序,它使用第三方库来执行特定任务;此库在其方法之一中执行语句Assembly.GetEntryAssembly() 如果我在调试时运行WPF应用程序(通过运行.Net exe进行测试),库将正常工作,并且Assembly.GetEntryAssembly()返回对可执行程序集的引用,但在生产中,我遇到了另一种情况,这会导致一些问题 在生产中,WPF应用程序与VB6应用程序集成,并使用InteropFormLibrary从VB6菜单启动程序;在这种情况下,库引发异常,因为Ass

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

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

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

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


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

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


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

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


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

是否可以在新的AppDomain中执行WPF应用程序?我正在尝试,但Interopt存在一些问题。最干净的方法是联系库开发人员,因为MSDN声明
GetEntryAssembly
如果调用,将返回
null
来自非托管代码。可能重复在新的AppDomain中执行WPF应用程序吗?我正在尝试,但Interopt存在一些问题最干净的方法是联系库开发人员,因为MSDN声明如果从非托管代码调用,
GetEntryAssembly
返回
null
。可能重复的是…这似乎是唯一的解决方案,现在我正试图联系库开发人员来解决这个问题。我发现的另一个“临时”和“危险”解决方案是使用MSIL反汇编程序(从使用ildasm命令的提示符处)修改语句,然后重新编译dll(使用ilasm命令)。它可以工作,但不是最好的选择。一般来说,它不会那么容易工作,因为您丢失了程序集的强名称,导致您重新编译引用该程序集的任何人,可能会引起巨大的连锁反应。对……事实上,我不得不使用“强名称工具”禁用dll(sn.exe-Vr)的验证这不是很安全。是的……这似乎是唯一的解决方案,现在我正试图联系库开发人员来解决这个问题。我发现的另一个“临时”和“危险”解决方案是使用MSIL反汇编程序(从提示符处使用ildasm命令)修改语句,然后重新编译dll(使用ilasm命令)。它可以工作,但不是最好的选择。一般来说,它不那么容易工作,因为您丢失了程序集的强名称,导致您重新编译引用该程序集的任何人,可能会引起巨大的连锁反应。对……事实上,我不得不使用“强名称工具”禁用dll(sn.exe-Vr)的验证,这不是很安全。