我有一个在远程 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:到目前为止,我们找到了两种解决此问题的方法。我们不太了解根本问题是什么,但是这两个都解决了它:
关闭优化。
在另一台机器上将程序集与 ILMerge 合并。
所以我们想知道构建机器是否以某种方式错误配置(考虑到我们已经使用该机器构建版本已经一年多了,这很奇怪)或者是否是其他问题。