私はもともと .net 4.0 で書かれたアプリケーションを持っています。このアプリケーションは、.net 2.0 を対象としたライブラリを参照しています。最近、公開されたメソッドのシグネチャを変更せずに、このライブラリを .net 4.0 にアップグレードする必要がありました。しかし、ライブラリを .net 4.0 にアップグレードすると、このライブラリを呼び出す exe が例外をスローします。
Unhandled Exception: System.MissingMethodException: Method not found:
'Void InteropSpace.myClass.Table(System.String[,] ByRef, System.String[,])'. at
ConsoleApplication1.Program.Main(String[] args)
このメソッド (表) を .net 2.0 バージョンのライブラリと .net 4.0 バージョンのライブラリで ILSpy で確認しました。関数のシグネチャは変更されていません。なぜこの奇妙な動作を理解できないのか、少しイライラしています。
UPDATE : 古いライブラリ (.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...]
と
string[, ]