在Windows中使用.NET 2.0运行时运行良好的控制台应用程序在Mono运行时中执行时会引发System.InvalidProgramException。System.InvalidProgramException:移动第三方.NET组件时出现无效的IL代码(Dundas Gauge for .NET)
该应用程序使用传统的第三方组件 - 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
很显然,我们在第三方的代码存在问题 - 构造 - 而我没有控制权。
其他细节:
这是一个.NET 3.5的应用程序使用Visual Studio 2008
我试图在Windows上运行的单本使用多个版本编译(单声道5.2.0.224 x64,Mono 3.12.1 x32)和FreeBSD(Mono 4.8.1 amd64)。
所有这些运行时都会发生同样的异常。
第三方组件是一个32位版本。
使用ILDasm进行检查时,第三方组件似乎被模糊处理。
可以做些什么来解决这个问题,并让程序运行在单声道?我觉得这样一个流行的组件包含无效的IL有点疯狂。它怎么可能在微软的.NET运行时工作,但不是Mono运行时?
我有没有指定运行时也不操作系统最初的登打士仪表执照上它必须运行。请注意,此组件是在Microsoft收购Dundas IP之前购买的。 –