У меня запущено приложение 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: Мы нашли два способа решения этой проблемы. Мы не совсем понимаем, в чем заключается основная проблема, но оба они решают ее:
Отключить оптимизацию.
Объединить сборку с ILMerge на другом компьютере.
Таким образом, мы задаемся вопросом, неправильно ли настроена сборочная машина (что странно, если учесть, что мы использовали машину для сборки релизов уже более года) или это какая-то другая проблема.