.NET Core vs Mono

.NET Core和Mono有什么区别?

我在官方网站上发现了一则声明:“为它编写的代码也可以跨应用程序堆栈移植,比如Mono。”

我的目标是使用c#, LINQ, EF7和Visual Studio创建一个可以在Linux上运行/托管的网站。

有人告诉我他想要“在Mono中”,但我不知道这是什么意思。我知道我想把。net Core 1.0和上面列出的技术一起使用。他还说他想使用“快速CGI”。我也不知道那是什么意思。

你能帮我理解这些术语吗?我的期望是否现实?

173757 次浏览

. net Core并不需要mono框架意义上的mono, . net Core是一个可以在包括Linux在内的多个平台上工作的框架。参考https://dotnet.github.io/

然而。net核心可以使用mono框架。参考https://docs.asp.net/en/1.0.0-rc1/getting-started/choosing-the-right-dotnet.html(注意rc1 documentatiopn没有rc2可用),但是莫诺不是微软支持的框架,建议使用受支持的框架

现在实体框架7现在被称为Entity Framework Core,在包括Linux在内的多个平台上可用。参考https://github.com/aspnet/EntityFramework(复习路线图)

我目前正在使用这两个框架,但你必须明白,它仍然在发布候选阶段(RC2是当前版本)和beta &发布候选版本已经发生了巨大的变化,通常会让你摸不着头脑。

这是一个关于如何在Linux中安装MVC . net Core的教程。https://docs.asp.net/en/1.0.0-rc1/getting-started/installing-on-linux.html

最后,你可以选择Web服务器(我假设fast cgi引用来自这里)来在Linux上托管你的应用程序。下面是安装到Linux环境的参考点。https://docs.asp.net/en/1.0.0-rc1/publishing/linuxproduction.html

我知道这篇文章最后主要是文档的链接,但在这一点上,这些是你最好的信息来源。net core在。net社区中仍然是相对较新的,在它完全发布之前,考虑到发布版本之间的巨大变化,我会犹豫是否要在产品环境中使用它。

在。net世界中有两种类型的clr,“完整”clr和核心clr,它们是完全不同的东西。

有两种“完整”的CLR实现,微软原生的。net CLR(用于Windows)和Mono CLR(它本身有用于Windows、linux和unix的实现(Mac OS X和FreeBSD))。一个完整的CLR就是你所需要的一切。因此,“完整的”clr往往尺寸较大。

另一方面,核心clr被削减了,而且小得多。因为它们只是一个核心实现,它们不太可能拥有你需要的一切,所以使用核心CLR,你可以使用NuGet向你的特定软件产品使用的CLR添加特性集。在Windows、linux(各种)和unix (Mac OS X和FreeBSD)上都有Core CLR实现。微软也已经或正在为Core CLR重构。net框架库,以使它们更适合核心上下文。鉴于mono在*nix操作系统上的存在,如果*nix的核心clr不包括一些mono代码库,那将是一个惊喜,但只有mono社区和微软可以肯定地告诉我们。

此外,我同意尼科的观点,核心clr是新的——我想它目前在RC2。我还不会依赖它来编写产品代码。

为了回答你的问题,你可以使用Core CLR或Mono在linux上发布你的网站,这是两种不同的方式。如果你现在想要一个安全的赌注,我会在linux上使用mono,然后如果你以后想移植,就移植到Core。

这个问题特别实际,因为昨天微软正式宣布发布。net Core 1.0。假设Mono实现了大多数标准的。net库,Mono和。net core之间的区别可以通过。net Framework和。net core之间的区别来看出:

  • api - .NET Core包含了许多与.NET框架相同的但是少了 api,并且具有不同的分解(程序集名称为
    . 0 不同的;关键情况下类型形状不同)。这些差异< br > 目前通常需要改变端口源到。net核心。net Core实现了.NET标准库API,它将增长到
    随着时间的推移,将包括更多的。net框架BCL api 子系统- .NET Core在.NET框架中实现了子系统的一个子集,目标是实现更简单 编程模型。例如,CAS (Code Access Security)不
    支持,但支持反射

如果你需要快速发布一些东西,选择Mono,因为它是目前(2016年6月)更成熟的产品,但如果你正在构建一个长期的网站,我会建议。net Core。它是由微软官方支持的,考虑到微软在。net Core开发中所付出的努力,所支持的api之间的差异可能很快就会消失。

我的目标是用c#, LINQ, EF7, visual studio来创建一个网站

Linq和实体框架都包含在。net Core中,所以你是安全的拍摄。

你不仅选择了一条现实的道路,而且可以说是微软强有力支持的最佳生态系统之一(也是x平台)。

  • 更新:关于.Net平台标准的主要文档在这里:https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
  • 更新:当前Mono 4.4.1不能运行最新的Asp。Net core 1.0 RTM
  • 虽然mono功能更加完善,但它的未来还不清楚,因为微软已经拥有它几个月了,而且它是他们支持它的重复工作。但是微软绝对致力于。net Core,并在上面下了很大的赌注。
  • 虽然。net core已经发布,但第三方生态系统还没有完全实现。例如Nhibernate, Umbraco等还不能在。net核心上运行。但他们有一个计划。
  • . net Core中缺少一些功能,比如系统。绘图,你应该寻找第三方库
  • 你应该使用nginx作为前端服务器,而kestrelserver用于asp.net应用,因为kestrelserver还没有完全准备好投入生产。例如HTTP/2没有实现。

我希望这对你们有帮助

< p > Necromancing。

.Net Core和Mono有什么区别?

net核心现在正式成为。net的未来。它从重写ASP。NET MVC框架和控制台应用程序开始,其中当然包括服务器应用程序。(因为它是图灵完备的,并且支持与C dll的互操作,如果你真的想,你也可以用它来写你自己的桌面应用程序,例如通过Avalonia这样的第三方库,在我第一次写这篇文章的时候,它有点非常基础,这意味着你几乎仅限于web或服务器的东西。)随着时间的推移,很多api被添加到。net Core中,以至于在3.1版本之后,。net Core将会跳到5.0版本,也就是没有“Core”的。net 5.0,这将会是。net Framework的未来。以前的完整的。net Framework将作为完整的。net Framework 4.8在维护模式中徘徊。x几十年,直到它消亡(也许仍然会有一些升级,但我怀疑)。换句话说,.NET Core是.NET的未来,而完整的。net框架将步Dodo/Silverlight/ windowphone的后尘

除了多平台支持,. net Core的主要目的是提高性能,并启用“本地编译”/自包含部署(因此你不需要在目标机器上安装. net框架/VM)。
一方面,这意味着docker。另一方面,自包含部署在“云计算”中很有用,因为这样你就可以使用你喜欢的任何版本的dotnet-CORE框架,而不必担心系统管理员实际安装了哪个版本的。net框架

虽然. net Core运行时支持多个操作系统和处理器,但SDK是另一回事。虽然SDK支持多种操作系统,但ARM对SDK的支持仍在进行中。net Core由微软支持。Dotnet-Core并没有附带WinForms或WPF之类的东西。

  • 从3.0版本开始,。net Core也支持WinForms和WPF,但仅限于Windows,而且仅限于c#。而不是VB。网 (VB。NET支持计划在2020年v5)。而且。net Core中没有表单设计器:它将在稍后随Visual Studio更新一起发布,具体时间还不确定。
  • WebForms仍然不支持。net Core, 也没有计划支持他们,从来没有 (Blazor是这个领域的新成员)。
  • . net Core也自带系统。运行时,替换mscorelib。
  • 通常,. net Core会与NetStandard混淆在一起,后者有点像System的包装器。Runtime/mscorelib(和其他一些),它允许你同时编写针对。net Core、Full . net Framework和Xamarin (iOS/Android)的库。
  • . net Core SDK不能在ARM上运行,至少在我上次检查时是这样。

Mono项目”比。net Core要老得多。
Mono是西班牙语,意思是猴子,顺便说一句,这个名字与单核细胞增多症无关(提示:你可以在http://primates.ximian.com/下获得工作人员列表)。
Mono在2005年由米格尔·德·伊卡扎 (GNOME和其他一些人的创始人)创建,作为Linux (Ximian/SuSe/Novell). net框架的实现。Mono包括Web-Forms、Winforms、MVC、Olive和一个名为MonoDevelop的IDE(也称为Xamarin Studio或Visual Studio Mac)。基本上相当于(OpenJDK) JVM和(OpenJDK) JDK/JRE(相对于SUN/Oracle JDK)。你可以用它来获取ASP。NET-WebForms + WinForms + ASP。NET-MVC应用程序在Linux上运行。

Mono是由Xamarin支持的(Xamarin是Ximian的新公司名称,当时Ximian专注于移动市场,而不是Linux市场),而不是微软。
(因为Xamarin被微软收购了,从技术上讲,这是微软的(但不是文化上的) 你通常可以在mono上编译c#的东西,但VB不行。净的东西。
Mono缺少一些高级功能,比如WSE/WCF和WebParts。
许多Mono实现是不完整的(例如在ECDSA加密中抛出NotImplementedException),有bug(例如ODBC/ADO。NET和Firebird),与.NET的行为不同(例如xml序列化),或者不稳定(ASP。NET MVC)和不可接受的慢(Regex)。从好的方面来看,Mono工具链也适用于ARM。
< / p > 就。net Core而言,当他们说跨平台时,不要指望跨平台意味着你实际上可以在ARM-Linux上apt-get安装。net Core,就像你可以在ElasticSearch上那样。您必须从源代码编译整个框架。
也就是说,如果你有足够的空间(比如Chromebook,总HD为16到32 GB)。
它还曾经存在与OpenSSL 1.1和libcurl不兼容的问题。
这些问题已经在最新版本的。net Core version 2.2中得到了纠正。

我在官方网站上找到了一份声明,上面写着:“代码是为 它还可以跨应用程序堆栈移植,例如Mono".

只要代码不依赖于WinAPI-calls、windows -dll-pinvoke、COM-Components、不区分大小写的文件系统、默认的系统编码(codepage),并且没有目录分隔符问题,那就是正确的。然而,. net Core代码运行在。net Core上,而不是在Mono上。因此,将两者混合起来是很困难的。由于Mono相当不稳定且速度缓慢(对于web应用程序),我无论如何都不推荐它。尝试一下。net核心上的图像处理,例如WebP或移动GIF或多页tiff或在图像上写入文本,你会非常惊讶。

备注:
从。net Core 2.0开始,就有了System.Drawing.Common (NuGet) 包含System.Drawing的大部分功能。应该是这样 在. net - core 2.1中,功能或多或少是完整的。然而, common使用GDI+,因此不能在Azure上工作 (系统。绘图库在Azure云服务中可用 [基本上只是一个虚拟机],但不是在Azure Web应用程序[基本上共享 托管?])
到目前为止,System.Drawing.Common在Linux/Mac上工作得很好,但在iOS/Android上有问题——如果它能工作的话,就在那里。
在。net Core 2.0之前,也就是说2017年2月中旬的某个时候,你可以使用SkiaSharp来对(例子)进行成像(你仍然可以)。在.net-core 2.0之后,你会注意到SixLabors ImageSharp是要走的路,因为System. core 2.0。绘图并不一定是安全的,并且有很多潜在的或实际的内存泄漏,这就是为什么你不应该在web应用程序中使用GDI;请注意,SkiaSharp比ImageSharp快得多,因为它使用本机库(这也是一个缺点)。另外,请注意,虽然GDI+可以在Linux &但这并不意味着它适用于iOS或Android系统。< / p >

非为。net(非核心)编写的代码不能移植到。net核心。
意思是,如果你想要一个像PDFSharp这样的非gpl c#库来创建pdf文档(非常常见),你就不走运了(目前) (现在不是了)。不用管ReportViewer控件,它使用windows - p调用(通过COM加密、创建mcdf文档、获取字体、字符、字距、字体嵌入信息、测量字符串和执行换行,以及实际绘制可接受质量的tiff格式),甚至不能在Linux
上的Mono上运行 (我正在努力)。< / p >

此外,用。net Core编写的代码不能移植到Mono,因为Mono缺乏。net Core运行时库(到目前为止)。

我的目标是用c#, LINQ, EF7, visual studio来创建一个网站

EF在我迄今为止尝试过的任何版本中都是如此他妈的慢(即使是在这样简单的事情上,比如一个表有一个左连接),我永远不会推荐它——在Windows上也不会。
如果你有一个有唯一约束的数据库,或者varbinary/filestream/hierarchyid列,我特别不推荐EF。(也不是schema-update)
而且也不是在db性能非常关键的情况下(比如10+到100+并发用户)。
此外,在Linux上运行一个网站/web应用程序迟早意味着你必须调试它。
Linux上没有. net Core的调试支持。(不再,但需要JetBrains Rider.)
MonoDevelop(目前)还不支持调试。net Core项目。
如果你有问题,你只能靠自己。您将不得不使用大量的日志记录。
注意,建议大量的日志记录将立即填满您的磁盘,特别是如果您的程序进入无限循环或递归。
如果你的web应用程序以root用户运行,这尤其危险,因为登录需要logfile-space——如果没有空闲空间,你就不能再登录了。
(通常情况下,大约5%的磁盘空间是为root用户[Windows上的管理员]保留的,所以即使磁盘几乎满了,至少管理员仍然可以登录。但是,如果您的应用程序以root身份运行,则该限制不适用于它们的磁盘使用,因此它们的日志文件可以使用100%的剩余空闲空间,因此即使管理员也不能再登录 因此,如果您重视数据/系统,最好不要加密该磁盘。< / p >
有人告诉我,他希望它是“在Mono”,但我不知道 这意味着什么。

这要么意味着他不想使用。net Core,要么他只想在Linux/Mac上使用c#。我猜他只是想在Linux上用c#来开发web应用,如果你真的想用c#的话,. net Core是最好的选择。不要用“Mono proper”;从表面上看,它一开始似乎是有效的,但相信我,你会后悔的,因为Mono的ASP。当你的服务器长期运行(超过1天)时,NET MVC是不稳定的-你现在已经得到警告。在techempower基准上测量Mono性能时,请参阅“未完成”参考。

fortune

我知道我想使用。net Core 1.0框架和技术 如上所述。他还说他想使用“快速cgi”。我不知道

这意味着他想使用高性能的全功能WebServer,比如nginx (Engine-X),可能是Apache。
然后他可以运行mono/dotnetCore和基于虚拟名称的托管(同一IP上的多个域名)和/或负载平衡。他还可以使用其他技术运行其他网站,而不需要在web服务器上使用不同的端口号。这意味着你的网站运行在一个fastcgi-服务器上,nginx通过fastcgi-协议将某个域的所有网络请求转发给该服务器。这也意味着你的网站运行在一个fastcgi管道中,你必须小心你所做的,例如你不能在传输文件时使用HTTP 1.1。
否则文件到目的地会乱码。
参见在这里在这里 < p > 结论:
. net Core目前(2016-09-28)并不是真正的可移植,也不是真正的跨平台(特别是调试工具)。
本地编译也不容易,尤其是对ARM来说。
在我看来,它的开发还没有“真正完成”。
例如,System.Data.DataTable/DataAdaper。更新丢失… (.NET Core 2.0不再使用)
连同System.Data.Common。IDB *接口。(在.NET Core 1.1中不再存在)
如果有一个经常使用的类,那么DataTable/DataAdapter将是它…
另外,linux安装程序(.deb)失败了,至少在我的机器上是这样,而且我确信我不是唯一一个有这个问题的人。
调试,也许用Visual Studio Code,如果你能在ARM上构建它(我设法做到了——如果你这样做了,不要关注Scott Hanselman的博客文章——在github上的VS-Code wiki中有一个如何做的方法),因为他们不提供可执行文件。
约曼也失败了。(我猜这和你安装的nodejs版本有关——VS Code需要一个版本,Yeoman需要另一个…但它应该在同一台计算机上运行。很蹩脚
不要介意它应该在操作系统默认提供的节点版本上运行。
不要介意一开始就不应该依赖于NodeJS。
kestell服务器也在开发中。
根据我的单项目经验,我非常怀疑他们是否在FastCGI上测试过。net Core,或者他们是否知道支持FastCGI对他们的框架意味着什么,更不用说他们测试它以确保“一切正常”了。事实上,我刚刚尝试用。net Core做了一个FastCGI应用程序,才意识到。net Core“RTM”没有FastCGI库

所以当你打算在nginx后面运行。net Core“RTM”时,你只能通过代理请求到kestrell(半成品的nodejs派生的web服务器)来做到这一点——目前在。net Core“RTM”中没有fastcgi支持,AFAIK。由于没有。net核心fastcgi库,也没有样本,因此几乎不可能有人在框架上做了任何测试来确保fastcgi按预期工作。

我也质疑它的表现。
(初步)技术功率基准(第13轮)中,aspnetcore-linux相对于最佳性能排名为25%,而类似的框架如Go (golang)的峰值性能排名为96.9%(这是在只返回纯文本而不访问文件系统的情况下). net Core在json序列化方面表现稍好,但看起来也不太令人信服(Go达到峰值98.5%,. net Core达到65%)。也就是说,它不可能比“单核细胞增多症”更糟糕。< / p > 此外,由于它还相对较新,并不是所有的主要库都被移植了(目前),我怀疑其中一些库是否会被移植。
成像支持充其量也值得怀疑。
对于任何加密,使用BouncyCastle代替。< / p >
你能帮我理解所有这些术语吗?如果我的期望 是现实的> < /强大?< / p >
我希望我能帮助你更好地理解这些术语。
就你的期望而言:
首先,在不了解Linux的情况下开发Linux应用程序是一个非常愚蠢的想法,而且它也一定会以某种可怕的方式失败。也就是说,因为Linux不需要授权成本,所以原则上这是一个好主意,但前提是你知道自己在做什么。
为一个无法调试应用程序的平台开发应用程序是另一个非常糟糕的想法。
在不知道会有什么后果的情况下开发fastcgi是另一个非常糟糕的想法。< / p > 如果你的项目不只是一个个人主页,那么在一个“实验性”平台上做所有这些事情,而不了解该平台的细节,也没有调试支持,这无异于自杀。另一方面,我想出于学习的目的在您的个人主页上使用它可能是一种非常好的体验——这样您就可以了解框架和非框架问题是什么。
例如,您可以(以编程方式)为应用程序循环挂载一个不区分大小写的fat32、hfs或JFS,以解决大小写敏感问题(不建议在生产环境中使用循环挂载)。 < / p > < p > 总结
目前(2016-09-28),我将远离。net Core(用于生产使用)。也许一两年后,你可以再看一看,但之前可能不会。
如果你有一个新的网络项目要开发,用。net Core启动,不要用mono。

如果你想要一个在Linux (x86/AMD64/ARMhf)、Windows和Mac上工作的框架,它没有依赖性,即只有静态链接,不依赖于。net、Java或Windows,请使用Golang。它更加成熟,性能得到了验证(百度在100万并发用户的情况下使用它),而且golang的内存占用明显更低。同样,golang在存储库中,.deb安装没有问题,源代码编译-不需要更改-并且golang(同时)在Linux(以及Windows和Mac)上有delve和JetBrains Gogland调试支持。Golang的构建过程(和运行时)也不依赖于NodeJS,这是另一个优点。< / p > 就单核细胞增多症而言,离它远点。
mono已经取得了惊人的进步,但不幸的是,这并不能替代生产应用程序的性能/可伸缩性和稳定性问题。
此外,单一开发已经消亡,他们基本上只开发与Android和iOS相关的部分,因为这是Xamarin赚钱的地方。
不要期望Web-Development成为一流的Xamarin/mono公民。
如果你开始一个新项目,. net Core可能是值得的,但对于现有的大型web表单项目,移植基本上是不可能的,所需的更改是巨大的。如果你有一个mvc项目,如果你最初的应用程序设计是合理的,那么更改的数量可能是可控的,而对于大多数现有的所谓“历史增长”的应用程序来说,这是不可能的 < p > 2016年12月更新:
原生编译已经从。net核心预览中移除,因为它还没有准备好…

看起来他们在原始文本文件基准上有了很大的改进,但另一方面,它也有很多bug。而且,它在JSON基准测试中进一步恶化。奇怪的是,实体框架的更新应该比Dapper更快——尽管两者都是创纪录的慢。这不大可能是真的。看来还有很多虫子要抓。

同样,Linux IDE方面的问题似乎也有所缓解。
JetBrains发布了c# /的早期预览版“Project Rider”。NET Core IDE,适用于Linux(以及Mac和Windows),可以处理Visual Studio项目文件。 最后一个c# IDE是可用的&这还不算慢。< / p > 结论:进入2017年,. net Core仍然是预发布的高质量软件。移植您的库,但在框架质量稳定之前,不要用于生产使用。

buggy .net core

< p > 2017年更新
现在已经把我(兄弟)的主页迁移到。net Core。
到目前为止,Linux上的运行时似乎足够稳定(至少对于小型项目来说)——它轻松地通过了负载测试——mono从来没有做到过。
此外,我似乎混淆了. net - core -native和. net - core -self-contained-deployment。自包含部署是可行的,但是它的文档有些不足,尽管它非常简单(构建/发布工具有点不稳定,但是-如果您遇到“需要正数。”-构建失败。"-再次运行相同的命令,它工作)。
< / p >

你可以跑

dotnet restore -r win81-x64
dotnet build -r win81-x64
dotnet publish -f netcoreapp1.1 -c Release -r win81-x64

注意:根据。net Core 3,你可以将所有缩小的内容发布为单独的文件:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
dotnet publish -r linux-x64 -c Release /p:PublishSingleFile=true
然而,与go不同的是,它不是一个静态链接的可执行文件,而是一个自提取的zip文件,因此在部署时,您可能会遇到 问题,特别是如果临时目录被组锁定 policy或还有其他问题。对于一个 不过,Hello-world程序。如果你不缩小,可执行文件的大小将在100 MB左右

你会得到一个独立的。exe文件(在发布目录下),你可以把它移动到没有安装。net框架的Windows 8.1机器上,让它运行。很好。正是在这里,dotnet核心才开始变得有趣起来。(注意差距,SkiaSharp 不能在Windows 8.1 / Windows Server 2012 R2上工作,[还]-生态系统必须先赶上-但有趣的是,Skia-dll-load-fail不会使整个服务器/应用程序崩溃-所以其他一切都可以工作)

(注意:在Windows 8.1上的SkiaSharp缺少适当的VC运行时文件- msvcp140.dll和vcruntime140.dll。将它们复制到发布目录中,Skia将在Windows 8.1上工作。)

< p > 2017年8月更新
. net Core 2.0发布。
小心-在认证中会有(巨大的破坏)变化…
好的方面是,它带回了DataTable/DataAdaper/DataSet类,以及更多的类。
已实现的。net Core仍然缺少对Apache SparkSQL的支持,因为默比乌斯还没有被移植。这很糟糕,因为这意味着我的IoT Cassandra集群不支持SparkSQL,所以没有连接……
实验性的ARM支持(只支持运行时,不支持SDK——对我的Chromebook上的devwork来说太糟糕了——期待2.1或3.0)。
PdfSharp现在实验性地移植到。net Core。
JetBrains骑手离开EAP。您现在可以使用它来开发&在Linux上调试。net Core——尽管到目前为止只有。net Core 1.1,直到支持。net Core 2.0的更新正式上线。
< / p > < p > 2018年5月更新
. net Core 2.1即将发布。 也许这将修复Linux上的NTLM身份验证(NTLM身份验证在Linux{和可能的Mac}上不起作用,在. net - core 2.0中有多个身份验证头,例如negotiate,通常与ms-exchange一起发送,他们显然只在v2.1中修复了它,2.0版本没有修复错误)。
但我不会在我的机器上安装预览版。所以等待。
据说V2.1还大大减少了编译时间。

< p > 另外,请注意在Linux上,.NET Core是64位only !
现在没有,将来也不会有。net Core的x86-32版本
而且ARM端口只能是ARM-32。目前还没有ARM-64。
在ARM上,你(目前)只有运行时,没有。net- sdk。
< / p >

还有一件事:
因为. net -Core使用OpenSSL 1.0, Linux上的. net Core不能在Arch Linux上运行,而且从派生意义上讲,也不能在Manjaro(目前最流行的Linux发行版)上运行,因为Arch Linux使用OpenSSL 1.1。所以如果你使用Arch Linux,你就不走运了(Gentoo也是) < / p >

编辑:

. net Core 2.2+最新版本支持OpenSSL 1.1。所以你可以用 它在Arch或(k)Ubuntu 19.04+上。你可能不得不使用。NET-Core 安装脚本,因为还没有包
从好的方面来看,业绩确实有所改善: fortune < / p >

明文

.NET Core 3:
据说。net - core v 3.0将WinForms和WPF引入。net - core。
然而,虽然。net -Core中的WinForms和WPF将是。net -Core中的WinForms和WPF将只在Windows上运行,因为WinForms/WPF将使用Windows- api。< / p > < p >注意:
. net Core 3.0已经发布了(RTM),并且支持WinForms和WPF,但是只支持c#(在Windows上)。有没有WinForms-Core-Designer。设计师最终会在某个时候发布Visual Studio更新。WinForms支持VB。不支持NET,但是计划在。net 5.0的某个时候在2020中。< / p >

PS:

echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> /etc/environment
export DOTNET_CLI_TELEMETRY_OPTOUT=1

如果你在窗户上用过,你可能从来没有见过这个:

.NET核心工具收集使用数据,以提高您的 体验。
匿名数据,不包含命令行 参数。
该数据由Microsoft收集并共享给 社区。
可以通过设置a来选择不使用遥测 将DOTNET_CLI_TELEMETRY_OPTOUT环境变量设置为1 最喜欢的外壳。你可以阅读更多关于.NET Core tools telemetry @ https://aka.ms/dotnet-cli-telemetry . < / p >
我想我应该提一下,我认为monodevelop(又名Xamarin Studio, Mono IDE,或Visual Studio Mac,因为它现在在Mac上被称为)已经发展得相当不错,并且-与此同时-基本上可用。
然而,JetBrains Rider (2018 EAP在这个时间点)肯定是更好更可靠的(并且包含的反编译器是一个生命更安全),也就是说,如果你在Linux或Mac上开发。net -Core。MonoDevelop不支持在。net Core Linux上的调试- stepthrough,尽管,因为MS不许可他们的调试API dll(除了VisualStudio Mac…). 然而,你可以通过.NET核心调试器扩展三星调试器MonoDevelop

来使用.NET Core的三星调试器

免责声明:
我不使用Mac,所以我不能说我在这里写的东西是否适用于基于FreeBSD-Unix的Mac。我指的是Linux (Debian/Ubuntu/Mint)版本的JetBrains Rider, mono, MonoDevelop/VisualStudioMac/XamarinStudio和. net - core。此外,苹果正在考虑从英特尔处理器转向自主制造的基于ARM(ARM-64?)的处理器,所以现在适用于Mac的很多东西在未来(2020+)可能不适用于Mac。< / p >

此外,当我写“mono是相当不稳定和缓慢的”,不稳定与WinFroms &WebForms应用程序,特别是通过fastcgi或XSP执行web应用程序(在4。mono的x版本),以及xml序列化处理特性,以及相当慢的WinForms,特别是正则表达式(ASP。NET-MVC也使用正则表达式进行路由)。

当我写关于单核细胞增多症2的经历时。x, 3。X和4。X,这也并不一定意味着这些问题到现在还没有解决,或者在你读这篇文章的时候还没有解决,也不意味着如果它们现在被修复了,以后就不会有回归,重新引入任何这些错误/特性。这也不意味着如果您嵌入单运行时,您将获得与使用(dev)系统的单运行时相同的结果。这也并不意味着嵌入单运行时(任何地方)就一定是免费的。

这一切并不一定意味着mono不适合iOS或Android,或者它在iOS或Android上也存在同样的问题。我不在Android或IOS上使用mono,所以我在这些平台上对稳定性、可用性、成本和性能没有任何发言权。显然,如果您在Android上使用. net,您还需要考虑其他一些成本问题,例如权衡xamarin成本与将现有代码移植到Java的成本和时间。在Android和IOS上听到mono应该很不错。对它持保留态度。首先,不要期望默认的系统编码在android/ios和Windows上是相同的,不要期望android文件系统是不区分大小写的,不要期望任何Windows字体。

简单来说,

Mono是.Net框架的第三方实现 Linux / Android / iOs < / p >

. net Core是微软自己的实现。

. net Core是未来。Mono最终会死。说到。net Core还不够成熟。我曾努力用IBM Bluemix实现它,后来放弃了这个想法。下来的时间(可能是1-2年),应该会更好。

这不再是。net Core vs. Mono。这是统一的。

截至2020年11月更新 - .NET 5发布,统一了。net框架和。net核心

.NET和Mono将统一到。net 6下,该版本将于2021年11月发布

  • . net 6.0将添加net6.0-iosnet6.0-android
  • 特定于操作系统的名称可以包括操作系统版本号,如net6.0-ios14

查看以下文章:

这是我最喜欢的话题之一,这里的内容真是太棒了。我在想比较Runtime和Mono中可用的方法是否值得或有效。我希望我的条件是对的,但我想你明白我的意思。为了更好地理解每个运行时目前支持什么,比较它们提供的方法是否有意义?我知道实现可能会有所不同,我没有考虑到框架类库或在一个环境与另一个环境中可用的大量其他库。我还意识到,有人可能已经把这项工作做得更有效率了。如果您能告诉我以便我复习,我将不胜感激。我觉得区分这种活动的结果是很有价值的,我想看看更有经验的开发人员对此有什么看法,他们是否会提供有用的指导。当我回来玩反射,并写了一些遍历。net目录,并列出程序集。