【问题标题】:How to run my C# Visual Studio Application with Mono under Linux?如何在 Linux 下使用 Mono 运行我的 C# Visual Studio 应用程序?
【发布时间】:2015-06-21 11:20:56
【问题描述】:

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

我已经完成了以下步骤:

  • 在Windows下用Mono Migration Analyser分析了我的.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 完全兼容。我正在使用强类型数据集、带有 DataBindings 的 DataGrids 和用户特定的应用程序设置。这些组件之一会导致问题吗? app.config 由 xbuild 进程创建,它包含预期的内容(具有默认值的应用设置)。

xbuild 编译器也创建了一个 mdb 文件。但是我不知道这个文件,因为 VS2013 没有创建这样的文件。

你知道为什么应用程序没有启动吗?

谢谢,

问候,

迈克尔

【问题讨论】:

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


    【解决方案1】:

    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 风格(请咨询您的数据库提供程序)。

    这当然不会被本妈查。

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

    顺便说一句:mdb 文件是用于调试构建的单声道版本的 pdb 文件。它们包含额外的信息(软调试器(即 gdb)的源文件、符号等的完全限定路径

    【讨论】:

    • 感谢您的提示。目前我没有在我的应用程序中使用任何数据库。它只是一个写入 XML 的 DataSet 对象。如果数据模型保持稳定,我会尝试整合数据库的使用。但现在它只是一个数据集。我还需要一个 ODBC 驱动程序吗?据我所知,只有当我有一个真正的关系数据库时才需要 ODBC。不过我会尝试在我的 Windows 机器上使用 Mono 运行它。
    • 那个 XML 文件被读写了吗?即硬编码的 Xml 文件位置。 Windows 路径样式?或者您是否使用 Path.Combine 等来构建与操作系统无关的路径?在 Windows 上运行它会很快告诉你。
    • 我可以在 Windows 上使用 Mono 运行我的应用程序,并且至少收到相同的异常消息。因此,我可以在 Windows 下运行该应用程序并对其进行调试。但我仍然不知道实际的问题是什么:-(
    • 应用程序尝试读取通常保存在用户特定版本的 app.config 中的 xml 文件。在默认的 app.config 中,路径为空。如果是这样,应用程序不会尝试读取 xml 文件。由于我正在尝试在 windows 上使用单声道运行应用程序,因此路径应该没有问题。
    • 我编写了一个带有强类型数据集、单个数据网格视图、绑定源和绑定导航器的示例应用程序。到目前为止,我可以运行该应用程序!但是,一旦我在 datagridview 中输入数据,应用程序就会崩溃。我可以通过将输出重定向到文件来检索异常。一般来说,我可以尝试调试这个错误,但在这一点上,我也觉得我必须投入太多的精力。我将使用 monodevelop 重写应用程序,或者将其移植到另一种更便携的语言。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多