如何在Linux下使用Mono运行我的C#Visual Studio应用程序?

时间:2015-06-21 11:20:56

标签: .net linux visual-studio-2013 mono moma

我用Visual Studio 2013编写了一个C#.NET 4.5 WinForms应用程序。现在我想在我的Linux机器上使用Mono运行这个应用程序(Mint 17.1)。

我已经完成了以下步骤:

  • 使用Mono Migration Analyser在Windows下分析我的.exe
    • Moma的所有测试都通过了(我必须适应RTL属性)
  • 已安装的mono-complete(apt-get install mono-complete,当前版本为3.2.8)
  • 使用xbuild编译(无选项)我的csproj文件(0错误1警告:/usr/lib/mono/4.5/Microsoft.Common.targets:警告:参考'System.Deployment'未解决)
  • 尝试使用我的控制台中的./app.exe启动应用程序

应用程序没有启动,但我看到一个异常,它没有给我任何关于可能出错的提示。这是例外:

Unhandled Exception:
System.ArgumentException: dataMember
  at System.Windows.Forms.ListBindingHelper.GetList (System.Object dataSource, System.String dataMember) [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.BindingSource.ResetList () [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.BindingSource.set_DataMember (System.String value) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.Windows.Forms.BindingSource:set_DataMember (string)
  at mda.vaulty.main.Database.VaultManagment.InitializeBindingSources () [0x00000] in <filename unknown>:0 
  at mda.vaulty.main.Database.VaultManagment..ctor () [0x00000] in <filename unknown>:0 
  at mda.vaulty.main.MainForm..ctor () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) mda.vaulty.main.MainForm:.ctor ()
  at mda.vaulty.main.Program.Main () [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: dataMember
  at System.Windows.Forms.ListBindingHelper.GetList (System.Object dataSource, System.String dataMember) [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.BindingSource.ResetList () [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.BindingSource.set_DataMember (System.String value) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.Windows.Forms.BindingSource:set_DataMember (string)
  at mda.vaulty.main.Database.VaultManagment.InitializeBindingSources () [0x00000] in <filename unknown>:0 
  at mda.vaulty.main.Database.VaultManagment..ctor () [0x00000] in <filename unknown>:0 
  at mda.vaulty.main.MainForm..ctor () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) mda.vaulty.main.MainForm:.ctor ()
  at mda.vaulty.main.Program.Main () [0x00000] in <filename unknown>:0 

该项目是一个.NET 4.5项目,据我所知,它与Mono完全兼容。我正在使用强类型DataSet,DataGrids与DataBindings和用户特定的应用程序设置。其中一个组件会导致问题吗? app.config由xbuild进程创建,它包含预期的内容(使用默认值的应用程序设置)。

xbuild编译器也创建了一个mdb文件。但这个文件对我来说不为人知,因为VS2013并没有创建这样的文件。

你知道应用程序没有启动的原因吗?

谢谢,

此致

迈克尔

1 个答案:

答案 0 :(得分:0)

at (wrapper remoting-invoke-with-check) System.Windows.Forms.BindingSource:set_DataMember (string) at mda.vaulty.main.Database.VaultManagment.InitializeBindingSources () [0x00000] in <filename unknown>:0 at mda.vaulty.main.Database.VaultManagment..ctor () [0x00000] in <filename unknown>:0 at mda.vaulty.main.MainForm..ctor () [0x00000] in <filename unknown>:0

您的Linux / Mint框中似乎没有定义数据库/数据源,因此文件名例外。开箱即用,Mono提供SQLite安装,但就是这样。有许多ODBC提供程序可以同时用于各种类型的Linux(请咨询您的数据库提供程序)。

这当然不会检查这个Moma。

另外,我建议在Windows机器上的Mono下运行它。安装Windows版本的mono并尝试运行您的应用程序。

BTW:mdb文件是用于调试版本的pdb文件的mono版本。它们包含额外的信息(用于软调试器(即gdb)的源文件,符号等的完全限定路径