リモート Web サーバーで ASP.NET アプリケーションを実行していますが、次のエラーが発生し始めました。
Method not found: 'Void System.Collections.Generic.ICollection`1..ctor()'.
DLL 内のコードを逆アセンブルしましたが、コンパイラがコードを正しく最適化していないようです。( Set は一連の一意のオブジェクトを実装するクラスであることに注意してください。これは IEnumerable から継承されます。) この行:
Set<int> set = new Set<int>();
次の行にコンパイルされます。
Set<int> set = (Set<int>) new ICollection<CalendarModule>();
CalendarModule クラスはまったく関係のないクラスです!! .NET がこのようなコードを間違ってコンパイルしていることに気付いた人はいますか?
更新 #1:この問題は、Microsoft のILMergeツールによって導入されたようです。現在、それを克服する方法を調査中です。
更新 #2:これまでに、この問題を解決する方法が 2 つあります。根本的な問題が何であるかはよくわかりませんが、これらの両方で修正されます。
最適化をオフにします。
別のマシンで ILMerge を使用してアセンブリをマージします。
そのため、ビルド マシンの構成が何らかの形で間違っているのか (1 年以上マシンを使用してリリースをビルドしていることを考えると奇妙です)、それとも他の問題なのか疑問に思っています。