草庐IT

c# - 编译基于 C# 的 Windows (WinForms App) 应用程序以在 Mac OS High Sierra 或 Mojave 上运行

coder 2024-06-06 原文

我已经使用 C# 在 Windows 上构建了一个(Windows 窗体应用程序)应用程序。现在,我想在不更改应用程序的情况下将整个项目/应用程序定位到 mac OS。有什么简单的方法可以实现吗?我不想在 MAC 上从头开始重建整个应用程序。我不想在 MAC 上使用虚拟机...我有 Visual Stuido 2017 和配对的 MAC。但是,我在这里迷路了。

最佳答案

;TLDR Mono , 使用 WinFormsMonoDevelop用于开发的 IDE。

.NET Framework 是包含所有内容但仅在 Windows 上运行的完整实现。

.NET Core 是 .Net 框架的较新开源实现,但不包括 WPF/WinForms - 因为它们严重依赖 DirectX/GDI,本质上使它们仅适用于 Windows。

赛马林。基于 Mono 框架的 Xamarin 更倾向于 iOS 和 Android。有一个 Xamarin Mac,但它支持与 Mono 相同的基于 GTK# 的 UI 工具包。有一个 WinForms 等效的 UI 工具包,也称为 Xamarin Forms。但它仅适用于移动设备(iOS、Android 和通用 Windows 平台)

单声道。 Mono 是 .Net 框架的开源实现,UI 默认使用 GTK#。在所有 Windows、Linux、macOS 上运行良好。在包括 Windows 在内的所有操作系统上使用 GTK# 作为底层 UI 工具包。

什么是跨平台? 基类库有一个子集,称为 .NET 标准库 - 以及编译器平台,只有 .Net 的这些子集是真正跨平台。

总结一下, 然而,Mono 确实支持 Windows Forms在 Linux 和 macOS 上。 除了一些极端情况外,它工作得很好。 但是,UI 外观和感觉仅限于 Windows。这就像在 WINE 下运行 Windows 应用程序一样。默认的 Mono IDE 是 MonoDevelop .

Xamarin Mac如果您想从头开始编写新应用程序,这非常好,因为 Xamarin Mac 向您公开了完整的 macOS SDK 并提供了自己的 IDE (Xamarin Studio)。

但在您的情况下,Mono 是最佳选择。安装单声道后,您甚至可以尝试从终端以 mono appName 运行您当前的应用程序。即使路径和其他资源损坏,它也应该呈现 UI。

2021 年更新

WPF 和 WinForms 现在是开源的,并且是 .Net Core 的一部分(现在称为 .Net。Core 已从名称中删除)。以前的经典.Net,现在叫.Net framework。新的 WPF/WinForms 功能增强功能仅适用于 .Net。尽管这些仍然仅适用于 Windows,而且会一直如此。

Avalonia UI FrameworkUno Platform是更新的基于 .Net Core (AKA .Net) 的跨平台解决方案。两者都使用 XAML。 Avalonia 更像是 WPF,而 Uno 则试图成为跨平台的 UWP。

关于c# - 编译基于 C# 的 Windows (WinForms App) 应用程序以在 Mac OS High Sierra 或 Mojave 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466621/

有关c# - 编译基于 C# 的 Windows (WinForms App) 应用程序以在 Mac OS High Sierra 或 Mojave 上运行的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  7. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  8. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  9. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  10. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

随机推荐