如何将C#WinForm应用程序和安装程序移植到MacOS?

如何将C#WinForm应用程序和安装程序移植到MacOS?,c#,xcode,macos,winforms,C#,Xcode,Macos,Winforms,我有一个在.NETFramework4.5下开发的小型c#winform应用程序。现在我需要找到一种方法将其转换为Mac Os应用程序。我不想使用交叉或单声道。事实上,我需要找到一种为Mac OS制作安装程序的方法 我在pc上有VS2017,在Mac上有VS和XCode 我想我曾经在VisualStudio中看到过一个选项(比如导出到XCODE或类似的东西),它将创建一个XCODE项目,并将其放在一个名为\uuuuMacosx的文件夹中 有谁能概述将我的WinForms应用程序移植到MacOS并

我有一个在
.NETFramework4.5
下开发的小型c#
winform
应用程序。现在我需要找到一种方法将其转换为Mac Os应用程序。我不想使用交叉或单声道。事实上,我需要找到一种为Mac OS制作安装程序的方法

我在pc上有VS2017,在Mac上有VSXCode

我想我曾经在VisualStudio中看到过一个选项(比如导出到XCODE或类似的东西),它将创建一个XCODE项目,并将其放在一个名为\uuuuMacosx的文件夹中


有谁能概述将我的WinForms应用程序移植到MacOS并为其创建安装程序的正确工具或步骤吗?

您的目标是.net framework 4.5,该框架仅在windows上运行,除非在mac上安装windows,否则无法将应用程序部署到mac。如果你想让你的windows窗体应用程序在mac上运行,你可以针对不同的框架(我知道你不想这么做,但这是唯一的方法)。你可以瞄准.NET Core 3.0尽管它仍然是预览版,但它的官方版本将于今年9月发布,并且它将支持winforms

您可以尝试以最后一个预览版本为目标,并尝试重新编译所有内容,以使可执行文件在Mac上工作

为了瞄准.NET核心框架 首先,您必须下载的最新预览版本并安装它。 然后,通过在控制台中运行
dotnet--info
命令来检查它是否已正确安装。该命令应显示如下内容:

.NET核心SDK已安装:

3.0.100-preview4-011223[C:\Program Files\dotnet\sdk]

.NET核心运行时已安装:

Microsoft.AspNetCore.App 3.0.0-preview4-19216-03[C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

Microsoft.NETCore.App 3.0.0-preview4-27615-11[C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

Microsoft.WindowsDesktop.App 3.0.0-preview4-27613-28[C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

您还必须拥有最新的预览版本

然后,您应该使用Visual Studio启用预览开发,要做到这一点,您应该转到工具→ 选择权→ 项目和解决方案→ .NET Core和check使用.NET Core SDK的预览版本,尽管我相信在VS2019预览版本中,默认情况下它是启用的

针对.Net Core和.Net Framework的windows窗体项目之间的项目结构实际上非常不同,因此最好从头开始创建一个新的解决方案。使用Visual Studio 2019的模板创建一个以.NET Core为目标的新Windows窗体项目。然后,您必须获取所有文件,从以.NET Framework为目标的旧项目到新项目,如果您有许多项目,则必须重复此过程,但将一个新项目添加到同一解决方案中,然后连接这些项目之间的引用以进行编译。如果您有类库项目,最好的选择是将它们定位到.net标准类库,而不是.net核心类库

如果您使用的是Nuget软件包,请确保下载它们的.NET核心版本


注意:由于.NET Core中的winforms仍然是一个预览版本,可能并不是您在以前的项目工作中使用的所有功能。(还请注意,您使用的是一个全新的框架,因此有些东西可能已经改变,有些东西可能在.NETCore中丢失)

你能解释一下步骤吗?@roozbehS我编辑了我的答案,以便给你一个更好的解释,我希望它对你有用!如果我没有弄错的话,.Net核心Windows窗体只是Windows:很简单:没有办法做到这一点。Winform是Windows特定的。我相信此问题可以设置为与此问题的重复: