在 Windows 中使用 .NET 2.0 运行时运行良好的控制台应用程序在 Mono 运行时中执行时会引发 System.InvalidProgramException。
该应用程序使用遗留的第 3 方组件 - Dundas Gauge for .NET - 来生成图像。
异常详情如下:
System.InvalidProgramException: Invalid IL code in Dundas.Gauges.WebControl.GaugeCore:.ctor (Dundas.Gauges.WebControl.GaugeContainer): IL_0013: stfld 0x0400019c
at Dundas.Gauges.WebControl.GaugeContainer..ctor () [0x00000] in <filename unknown>:0
at GSR.Dashboard.Gauges.GrowthGaugeFactory.CreateGaugeContainer () [0x00000] in <filename unknown>:0
at GSR.Dashboard.GaugeCompiler.Program.Main (System.String[] Args) [0x00000] in <filename unknown>:0
显然,我们在第 3 方的代码中存在问题——一个构造函数——我无法控制它。
额外细节:
这是一个使用 Visual Studio 2008 编译的 .NET 3.5 应用程序。
我尝试在 Windows(Mono 5.2.0.224 x64、Mono 3.12.1 x32)和 FreeBSD(Mono 4.8.1 amd64)上使用多个版本的 Mono 来运行它。
所有这些运行时都会发生相同的异常。
第 3 方组件是 32 位版本。
使用 ILDasm 检查时,第 3 方组件似乎被混淆了。
可以做些什么来解决这个问题并让程序在 Mono 中运行?我觉得这样一个流行的组件包含无效的 IL 有点疯狂。它怎么可能在 Microsoft 的 .NET 运行时而不是 Mono 运行时上工作?