未处理的异常:在单机上运行时,System.TypeLoadException,在.NET 4上编译

时间:2012-09-28 14:50:29

标签: c#-4.0 mono

我在C#中编写了一个小应用程序,没有问题。目标框架是.NET 4。

当我在linux - mono下运行应用程序时,应用程序启动没有问题。

但是我似乎在单声道下遇到线程问题。

以下代码:

 try
                {
                    Thread oThread = new Thread(new ParameterizedThreadStart(this.SendSms));
                    oThread.IsBackground = true;
                    oThread.Start(_data);

                    while (!oThread.IsAlive)
                    {
                        Console.WriteLine("Sleeping...");
                        Thread.Sleep(1);
                    }

                }
                catch (TypeLoadException tlex)
                {
                    Console.WriteLine("TypeLoadException: " + tlex.Message);

                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

似乎没有使用SendSms方法,而是抛出以下错误:

Unhandled Exception: system.TypeLoadException: A type load exception has occurred. at System.Threading.Thread.StartUnsafe () [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: A type load exception has occurred. at System.Threading.Thread.StartUnsafe () [0x00000] in <filename unknown>:0

现在我是Mono的新手,所以首先不知道为什么这个未处理的异常发生,因为参数化线程的代码来自'http://www.mono-project.com/ThreadsBeginnersGuide'。其次,当我加入时,为什么没有处理     catch(TypeLoadException tlex)

请协助。

由于

尼尔

3 个答案:

答案 0 :(得分:2)

我在运行debian squeeze的web服务器上遇到了类似的问题。 This post给了我一个线索。

我设置了一个虚拟机并使用apt-get安装了整个monodevelop并且它工作正常。 由于我不想在生产机器上安装那么多软件包和依赖项,我花了几个小时来隔离丢失的软件包。

就我而言,他们只缺少3个包(libmono-system-xml-linq4.0-cil,libmono-system-componentmodel-dataannotations4.0-cil和libmono-system-componentmodel-composition4.0-cil) ,但当然这取决于你的申请。

根据错误消息,找出解决方案并不容易!

答案 1 :(得分:1)

可能这个答案可以帮到你..

Mono-LibreOffice System.TypeLoadException

您是否尝试在mono下编译相同的程序并尝试运行它?

你还使用哪个版本的单声道?可能需要将其更新到最新版本。

  

mono --version

v 2.10看起来是最新的稳定版本 http://www.go-mono.com/mono-downloads/download.html

答案 2 :(得分:0)

虽然问题是通过安装丢失的软件包修复的,但我注意到在通过Nuget引用DLL时也会出现此错误:Monodevelop没有将这些DLL复制到输出文件夹(即/ bin / Debug),这使我的程序无法跑。调试器甚至无法进入第一行代码!在Ubuntu 16.04上发生了这种情况。检查输出文件夹,如果您发现某些DLL丢失,您应该尝试手动复制它们,看看您的应用程序现在是否运行。