2016-08-23 155 views
1

我有一个使用Visual Studio 2015 Community写在.Net framework 4.5C#之上的应用程序。我在64 bit机器上创建了它在Win10操作系统。可以在ubuntu上运行winforms应用程序吗?

有没有可能在Ubuntu上运行这个应用程序?那么我该如何编译应用程序才能使它与ubuntu机器兼容?

我想部署它作为一个跨平台的应用程序,但我很难找出最好的方法。我听说过Mono,但我还没有熟悉IDE。

请帮忙。

+1

我认为这是不可能的,因为WinForms是WinAPI函数的一个包装,它可能在Ubuntu中没有模拟。 – Anton

+0

这听起来很糟糕,但我发现在** Mono **中创建的winforms应用程序,他们说它也可以在ubuntu中运行。我对这种方法的问题是我不知道如何在Mono中编译我的应用程序以在Ubuntu中工作。 –

+0

我找到了这个[链接] http://www.mono-project.com/docs/gui/winforms – Anton

回答

1

Re。 WinForms:理论上这是可能的,尽管您可能想要检查WinForms项目的状态以了解它是如何跨平台的,以及某些工具(如表单设计器)是否可用和/或是否稳定。如果你从头开始,你可以使用GTK#,它是跨平台的,并且在MonoDevelop/Xamarin中有很好的工具支持,但如果你已经在WinForms上投入了大量资金,这可能没有什么帮助。

Re。为Linux编译:除非您使用代码中的任何.NET CLR特定功能(自然不会在Mono中实现),否则您不需要使用Mono重新编译,或者您正在使用例如。 ILMerge在您的构建过程中。我会将你的exe与依赖关系放在Linux上并测试它以发现问题。如果你最终需要重新编译,你可以在Linux,BSD或Mac OS X上直接使用Mono编译器或在MonoDevelop中打开项目并以此方式构建它;任何这些平台都应该生成一个可以在任何其他* nix上用Mono执行的程序。

+0

是的这是真的,我认为我真的需要从头到脚开始,因为在将winforms.net转换为跨平台应用程序时有很大的困难,我使用了许多** MoMa **检测到的P/Invoke方法没有在Mono/Xamarin IDE中找到。 –

1

除非你使用特殊的.NET类或本地库,否则它应该是可能的,也是容易的。

因为.NET编译的可执行文件是建立在字节码上的,所以它们没有链接到特定的平台,Mono的设计考虑到了这一点。

假设你刚刚测试了名为“WindowsApplication”的应用程序,尝试按照下列步骤操作:

检查下你的Visual Studio项目文件夹,试图找到你的WindowsApplication.exe。 检查"C:\Users\YourName\Documents\Visual Studio\Projects\WindowsApplication\WindowsApplication\bin\Debug(或释放)

您的文件夹在你的Ubuntu系统检查安装Mono如果命令可用(本次测试只使用你的主目录)后:

[email protected] ~ $ mono --version Mono JIT compiler version 5.0.1 (Visual Studio built mono) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: normal SIGSEGV: normal (more output)

将程序可执行文件从Windows复制到Ubuntu文件夹中,假设您将其复制到刚刚测试的目录mono

启动它通过键入: mono ./WindowsApplication1.exe(如果它在你的当前目录) 或 mono /<another_path_to_your_executable>/WindowsAppliction.exe

如果它没有运行,您可以下载“单声道迁移分析器”(现代艺术博物馆),这是一种工具,专门用于识别未解决的依赖关系并帮助您解决问题。

相关问题