【发布时间】:2008-09-23 20:05:41
【问题描述】:
我有一个在远程 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: 这个问题似乎是由微软的ILMerge 工具引入的。我们目前正在研究如何克服它。
更新 #2: 到目前为止,我们找到了两种解决此问题的方法。我们不太了解潜在的问题是什么,但是这两个都解决了它:
关闭优化。
在不同的机器上使用 ILMerge 合并程序集。
所以我们想知道构建机器是否以某种方式配置错误(考虑到我们已经使用该机器构建版本已经一年多了,这很奇怪)还是其他问题。
【问题讨论】:
-
这不足以调试您的问题。你能上传足够多的代码来在某处重现问题吗?
-
你不知道 Int 继承自 CalenderModule 吗? :)
标签: c# asp.net optimization compiler-construction ilmerge