.NET Core与Mono

时间:2016-06-10 00:13:08

标签: c# .net mono .net-core

.NET Core和Mono有什么区别?

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

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

有人告诉我,他希望它是“Mono”,但我不知道这意味着什么。我知道我想使用上面列出的技术使用.NET Core 1.0。他还说他想使用“快速CGI”。我不知道这意味着什么。

你能帮助我理解所有这些术语吗?如果我的期望是现实的吗?

8 个答案:

答案 0 :(得分:51)

在.NET世界中,有两种类型的CLR,“完整”CLR和核心CLR,这些是完全不同的东西。

有两个“完整”CLR实现,Microsoft本机.NET CLR(适用于Windows)和Mono CLR(它本身具有Windows,Linux和unix(Mac OS X和FreeBSD)的实现)。一个完整的CLR就是这样 - 你需要的一切。因此,“完整”CLR的规模往往很大。

另一方面,核心CLR被削减,而且要小得多。因为它们只是一个核心实现,所以它们不太可能拥有您需要的所有内容,因此使用Core CLR,您可以使用NuGet为特定软件产品使用的CLR添加功能集。有适用于Windows,Linux(各种)和unix(Mac OS X和FreeBSD)的Core CLR实现。 Microsoft也已经或正在为Core CLR重构.NET框架库,以使它们在核心上下文中更具可移植性。鉴于mono在* nix OS上的存在,如果* nix的Core CLR不包含某些单声道代码库,那将是一个惊喜,但只有Mono社区和Microsoft可以肯定地告诉我们。

另外,我同意Nico的说法,核心CLR是新的 - 我认为这是在RC2。我不会依赖它来生成代码。

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

答案 1 :(得分:13)

您不仅选择了一条现实的道路,而且可以说是MS强力支持的最佳生态系统之一(也是X平台)。你还应该考虑以下几点:

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

我希望它有所帮助

答案 2 :(得分:9)

.Net Core在单声道框架意义上不需要单声道。 .Net Core是一个可以在包括Linux在内的多个平台上运行的框架。参考https://dotnet.github.io/

然而.Net核心可以使用单声道框架。参考https://docs.asp.net/en/1.0.0-rc1/getting-started/choosing-the-right-dotnet.html(注意rc1 documentatiopn no rc2 available),但 mono 不是Microsoft支持的框架,建议使用支持的框架

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

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

这是一个关于如何将MVC .Net Core安装到Linux的教程。 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核心在.Net社区中仍然相对较新,在完全发布之前,鉴于发布版本之间的重大变化,我会犹豫是否在产品环境中使用它。

答案 3 :(得分:7)

这个问题特别实际,因为昨天微软正式announced .NET Core 1.0 release。假设Mono实现了大多数标准.NET库,可以通过.NET Framework和.NET Core之间的差异看出Mono和.NET核心之间的区别:

  
      
  • API - .NET Core包含许多与.NET Framework相同的但更少的API,并且具有不同的因子(程序集名称为
      不同;类型形状在关键情况下有所不同)。这些差异
      目前通常需要将端口源更改为.NET Core。 。净   Core实现了.NET标准库API,它将增长到
      随着时间推移包含更多.NET Framework BCL API。
  •   
  • 子系统 - .NET Core在.NET Framework中实现了子系统的子集,其目标是实现更简单,   编程模型。例如,代码访问安全性(CAS)不是
      支持,同时支持反射。
  •   

如果您需要快速启动,请使用Mono,因为它是目前(2016年6月)更成熟的产品,但如果您要构建一个长期网站,我建议使用.NET Core。它得到了微软的官方支持,考虑到微软在开发.NET Core方面的努力,支持的API的差异很快就会消失。

  

我的目标是使用C#,LINQ,EF7,visual studio来创建一个网站   可以在linux中运行/托管。

Linq和实体框架are included in .NET Core,所以你可以安全地拍摄。

答案 4 :(得分:3)

简单来说,

  

Mono是.Net框架的第三方实现   的Linux / Android设备/ IOS

     

.Net Core是微软自己的实现方式。

.Net Core是未来。和Mono最终会死。话虽如此.Net Core还不够成熟。我正在努力用IBM Bluemix实现它,后来放弃了这个想法。减少时间(可能是1 - 2年),应该会更好。

答案 5 :(得分:1)

这是我最喜欢的主题之一,这里的内容非常棒。我在考虑比较 Runtime 和 Mono 中可用的方法是否值得或有效。我希望我的条款是正确的,但我想你知道我的意思。为了更好地了解每个运行时当前支持的内容,比较它们提供的方法是否有意义?我意识到实现可能会有所不同,并且我没有考虑过框架类库或在一个环境与另一个环境中可用的大量其他库。我也意识到有人可能已经更有效地完成了这项工作。如果您让我知道以便我可以查看它,我将不胜感激。我觉得在此类活动的结果之间做一个差异是有价值的,并且想看看更有经验的开发人员对此有何看法,他们是否会提供有用的指导。回来的时候我在玩反射,写了一些 lines 来遍历 .net 目录,并列出程序集。

答案 6 :(得分:0)

这不再是.NET Core与Mono。它是统一的。

截至2020年11月的更新-结合了.NET Framework和.NET Core的.NET 5

.NET和Mono将在2021年11月发布的.NET 6下统一化。

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

检查以下链接:

答案 7 :(得分:-7)

简而言之:

Mono = C#编译器

Mono Develop =编译器+ IDE

.Net Core = ASP编译器

.Net Core的当前案例只有在采用某种开放的winform标准并采用更广泛的语言后才是Web,它最终可能成为Microsoft的杀手dev。考虑到Oracle最近的Java许可举动,微软有很大的光辉。