无法从程序集加载类型(可执行文件)

时间:2014-12-19 01:40:20

标签: c# mono typeloadexception

这在Windows中运行良好,但是当尝试在Mono中运行时,我收到以下错误:

Unhandled Exception:
System.TypeLoadException: Could not load type 'WLBot.LobbyBot.LobbyBot[]' from assembly 'WLBot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
  at System.Collections.Generic.Dictionary`2[WLCommon.Matches.MatchSetupDetails,WLBot.LobbyBot.LobbyBot].InitArrays (Int32 size) [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.Dictionary`2[WLCommon.Matches.MatchSetupDetails,WLBot.LobbyBot.LobbyBot].Init (Int32 capacity, IEqualityComparer`1 hcp) [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.Dictionary`2[WLCommon.Matches.MatchSetupDetails,WLBot.LobbyBot.LobbyBot]..ctor () [0x00000] in <filename unknown>:0 
  at WLBot.Client.WLBotClient..ctor (System.String url, System.String botid, System.String secret) [0x00000] in <filename unknown>:0 
  at WLBot.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'WLBot.LobbyBot.LobbyBot[]' from assembly 'WLBot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
  at System.Collections.Generic.Dictionary`2[WLCommon.Matches.MatchSetupDetails,WLBot.LobbyBot.LobbyBot].InitArrays (Int32 size) [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.Dictionary`2[WLCommon.Matches.MatchSetupDetails,WLBot.LobbyBot.LobbyBot].Init (Int32 capacity, IEqualityComparer`1 hcp) [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.Dictionary`2[WLCommon.Matches.MatchSetupDetails,WLBot.LobbyBot.LobbyBot]..ctor () [0x00000] in <filename unknown>:0 
  at WLBot.Client.WLBotClient..ctor (System.String url, System.String botid, System.String secret) [0x00000] in <filename unknown>:0 
  at WLBot.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

这有点令人气愤,因为类实际上已编译到exe中,而不像dll那样分开。我所看到的所有答案都是关于尝试从库中加载类型。

即使我在项目中重新创建了类,也会发生同样的事情。我很困惑为什么会这样。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这个答案对你来说似乎很有意思:Mono-LibreOffice System.TypeLoadException

答案引用:

  

.NET框架具有真正的即时编译器。 Mono没有,它有一个AOT(Ahead Of Time)编译器。换句话说,它积极地编译程序集中的所有代码,而不仅仅是将要执行的代码。

因此,不要试图理解代码行(您的构造函数),而是尝试考虑您可能正在调用的其他内容。他使用var而不是声明变量类型本身。这样可以防止Mono在您的过程中提前前进,并让它在您执行时决定类型。

希望它可以帮助您调试代码。

答案 1 :(得分:0)

不是OP的答案,但对于未来的googlers,我在Windows上编译的二进制文件存在此问题并复制到运行Raspbian(jessie)的Raspberry Pi。

同样,在Windows上运行也没问题。

受影响的Mono版本(由tarball构建)为4.6.0.125/753c323

修复方法是升级到4.6.1.5/ef43c15