【发布时间】:2016-11-13 23:13:43
【问题描述】:
我偶然发现了一些奇怪的东西:我得到了一个BadImageFormatException,但不知道它可能指的是什么图像(程序集)。
我简化了解决方案,使其仅包含一个没有依赖关系的项目:
如你所见,它只使用System(和mscorlib),当然我不会在运行时加载程序集。
它使用 .NET 4.5.2 编译为 AnyCpu,使用 C#6 编译为 VS 2015,尽管这些都不重要。
我尝试使用 C#5 制作示例,但是一旦我替换了所有“?”。运营商,它停止发生。
我已经主持了这个项目,以便人们可以自己尝试:
git clone -b crash-sample https://github.com/jtheisen/moldinium.git
我在 4 台机器上进行了干净构建和测试,都显示了相同的效果。
崩溃的堆栈跟踪是:
Ex.: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at IronStone.Moldinium.LiveList.<>c__DisplayClass10_0`1.<Where>b__2(ListEvent`1 v)
at IronStone.Moldinium.ActionObserver`1.OnNext(T value) in C:\Source\Repos\moldinium\ConsoleApplication1\Rx.cs:line 51
...snipped...
在输出上运行 PEVerify 会产生以下错误:
[IL]:错误: [C:\Source\Repos\moldinium\ConsoleApplication1\bin\Debug\Bad.exe : IronStone.Moldinium.LiveList+c__DisplayClass10_0`1[TSource]::b__2][offset 0x0000013B] 无法解析令牌。
从 Select.cs 文件中删除所有 ?. 运算符可解决此问题。
使用 ILSpy 我已将问题隔离到:
IronStone.Moldinium.LiveList.<>c__DisplayClass10_0`1.<Where>b__2
您可以在 gist here 中查看该方法的 IL 转储(通过 ILSpy)。 Bad IL 是使用?. 时,Good IL 是 C# 5.0 样式。
这是使用 VS2015.3 构建的
CSC 版本:Microsoft (R) Visual C# 编译器版本 1.3.1.60616
【问题讨论】:
-
@DaveShaw 看来我很幸运能找到你。我在这里超出了我的深度。
-
我已经重写了这个问题并合并了我的 cmets,以便更多地关注编译器错误,而不是运行时崩溃。
-
你可能想在github.com/dotnet/roslyn/issues上发帖
-
@ScottChamberlain - 我想知道是否有人会缩小范围,但我还是发布了一个问题:github.com/dotnet/roslyn/issues/12439
标签: c# visual-studio-2015 roslyn c#-6.0