1

このコードはコンパイルされ、ローカルで正常に実行されますが、別のサーバーでは実行されません。どちらのマシンも 64 ビット オペレーティング システムです。

これは呼び出しです:

retItem = (DataCollectionSetValueHeader)new DataCollectionSetValueHeaderLogic().GetItem(Id);  // Id is an int.

そして、これは呼び出されているメソッド シグネチャです。

public DataCollectionSetValueHeader GetItem(long entityID)  // This one is obviously a long

これはコンパイルされるので、long を期待するメソッドに int を渡しても問題ないと思います。問題は、これがローカルでは機能するのに、別のマシンでは "MissingMethodException" で失敗するのはなぜですか?

この問題のトラブルシューティングをどこから始めればよいか悩んでいます。別のバージョンの .NET フレームワークが原因でしょうか? 他の何か?

4

1 に答える 1

3

これはコンパイルされるので、long を期待するメソッドに int を渡しても問題ないと思います。

いいえ、そうではありません-バイナリレベルではありません。コンパイラはコードを次のように変換するため、ソース コードレベルでは問題ありません。

GetItem((long) Id)

しかし、メソッドをパラメーターがあるかのように使用するコードをコンパイルするとint、パラメーターの型を変更したり、メソッド自体を含むアセンブリだけを再コンパイルしたりして、古いバイナリが機能することを期待することはできません。呼び出しコードも再コンパイルする必要があります。

両方の場所で同じバイナリを (呼び出しのターゲットとして) 使用していると思われる場合は、別のものである必要があります。

于 2012-03-22T20:24:12.967 に答える