当前位置:  开发笔记 > 编程语言 > 正文

C#编译器错误地优化代码

如何解决《C#编译器错误地优化代码》经验,为你挑选了1个好方法。

我有一个在远程Web服务器上运行的ASP.NET应用程序,我刚刚开始收到此错误:

Method not found: 'Void System.Collections.Generic.ICollection`1..ctor()'.

我反汇编了DLL中的代码,似乎编译器错误地优化了代码.(注意,Set是一个实现一组唯一对象的类.它继承自IEnumerable.)这一行:

Set set = new Set();

编译成这一行:

Set set = (Set) new ICollection();

CalendarModule类是一个完全不相关的类!有没有人注意到.NET之前错误地编译代码?

更新#1:此问题似乎是由Microsoft的ILMerge工具引入的.我们目前正在调查如何克服它.

更新#2:到目前为止,我们找到了两种解决此问题的方法.我们不太明白底层问题是什么,但这两个问题都解决了这个问题:

    关闭优化.

    在不同的计算机上将集合与ILMerge合并.

因此,我们想知道构建机器是否以某种方式配置错误(考虑到我们已经使用机器来构建版本超过一年,这很奇怪)或者是否是其他问题.



1> Keith..:

啊,ILMerge - 您问题中的额外信息确实有助于解决您的问题.虽然我不希望.net编译器以这种方式失败,但我希望偶尔会看到ILMerge的这种事情(鉴于它正在做什么).

我的猜测是你的两个程序集使用相同的优化'技巧',一旦合并你就会得到冲突.

你有没有提出微软的错误?

同时解决方法是将源程序集作为单个程序集重新编译,从而节省了对ILMerge的需求.由于csproj文件只是XML列表,因此它们基本上很容易合并,您可以将其自动化为额外的MSBuild步骤.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有