C# C(.NET 4.0)应用程序的一个引用从.NET 2.0升级到.NET 4.0时,会引发System.MissingMethodException
我有一个最初用.NET4.0编写的应用程序。此应用程序引用了一个针对.net 2.0的库。最近,我不得不将这个库升级到.NET4.0,而不更改公开方法的任何签名。但是将库升级到.NET4.0时,调用该库的exe会抛出一个异常C# C(.NET 4.0)应用程序的一个引用从.NET 2.0升级到.NET 4.0时,会引发System.MissingMethodException,c#,.net,.net-4.0,interop,.net-2.0,C#,.net,.net 4.0,Interop,.net 2.0,我有一个最初用.NET4.0编写的应用程序。此应用程序引用了一个针对.net 2.0的库。最近,我不得不将这个库升级到.NET4.0,而不更改公开方法的任何签名。但是将库升级到.NET4.0时,调用该库的exe会抛出一个异常 Unhandled Exception: System.MissingMethodException: Method not found: 'Void InteropSpace.myClass.TableSystem.String[,]ByRef,System.Stri
Unhandled Exception: System.MissingMethodException: Method not found:
'Void InteropSpace.myClass.TableSystem.String[,]ByRef,System.String[,]'。在控制台Application 1.Program.MainString[]参数处
我在ILSpy的.NET2.0版本的库和.NET4.0版本的库中检查了这个方法表。函数的签名尚未更改。我有点恼火为什么我不能理解这种奇怪的行为
更新:
旧库.net 2.0中导出函数的签名:
.method public hidebysig static
void Table (
[out] string[, ]& TableControl2,
string[, ] TableControl
) cil managed
新库.net 4.0中导出函数的签名:
.method public hidebysig static
void Table (
[out] string[0..., 0...]& TableControl2,
string[0..., 0...] TableControl
) cil managed
我不完全相信这就是它失败的原因。两者的区别是什么
string[0..., 0...]
及
在.NET4中可能存在该方法的新重载。这篇文章可能会有帮助
确保您在ILSpy中浏览的程序集和在运行时加载的程序集是相同的程序集。我通过将调试器附加到exe来完成此操作,并检查它是否确实加载了所需的程序集。我在库中调用的函数不是系统定义的函数。从.net 2.0升级到.net 4.0时,此函数的定义或签名未更改。我希望这能让事情变得更清楚。
string[, ]