理解 .Net Core 和 Mono

3
  1. 在开发.Net Core应用程序时,.NET依赖项和DLL文件被嵌入应用程序中。这是否意味着我不需要在客户端PC上安装.NET依赖项?
  2. 如果我为Linux开发一个.Net Core控制台应用程序,是否需要在Linux PC(客户端)上安装Mono
  3. .Net Core应用程序是否与Android兼容?

3
请从https://learn.microsoft.com/en-us/dotnet/core/开始学习。"Self contained deployment" 部分将为您提供答案。 - Lex Li
在GitHub上有一个.NET Core的Android实验版本,网址是https://github.com/qmfrederik/coredroid,但由于Miguel de Icaza团队在Xamarin上的工作,我们很快可能就不需要它了。 - Jamie Taylor
2个回答

2

关于你的问题:

不,依赖项并没有嵌入应用程序中(.NET不支持静态链接)。
是的,在发布时,依赖项将作为单独的文件添加(自包含)。
如果你的应用程序是.NET Core应用程序,则不需要安装.NET Core框架。也不需要Mono。
你可以针对每个平台进行自包含部署:

Windows-x86-32:

dotnet restore -r win-x86
dotnet build -r win-x86
dotnet publish -f netcoreapp2.0 -c Release -r win-x86

Windows-x86-64:

dotnet restore -r win-x64
dotnet build -r win-x64
dotnet publish -f netcoreapp2.0 -c Release -r win-x64

Linux-x86-32:.NET Core 不支持

Linux-x86-64:

dotnet restore -r linux-x64
dotnet build -r linux-x64
dotnet publish -f netcoreapp2.0 -c Release -r linux-x64

Linux ARM (Android/ChromeOS)

dotnet restore -r linux-arm
dotnet build -r linux-arm
dotnet publish -f netcoreapp2.0 -c Release -r linux-arm

Linux-arm-64: .NET Core不支持

这会添加所有依赖项,包括.NET Core运行时库。如果使用的DLL引用了本地DLL(作为嵌入式资源提供),但未提供必要的C运行时库(例如,当本地DLL/.so是动态链接时,例如SkiaSharp),仍可能出现问题。

此外,.NET Core可以使用共享框架运行,这意味着部署大小更小,但必须安装共享框架版本。

  1. 由于Android是基于Linux的,且您没有运行在x86-32处理器或ARM-64处理器上的Android,因此.NET Core应该与Android兼容。我从未测试过这个前提。可能会有错误。ARM支持不稳定。

然而,我不清楚您想在Android上使用.NET Core做什么。由于.NET不实现任何Android UI接口。Xamarin.Forms可能会支持使用.NET Core的Android-UI - 它肯定支持使用mono。但您可以在Android上运行Web/其他服务器或控制台应用程序。

请参见CoreDroid


2
Mono和.NET Core是两种不同的技术。
Mono由Miguel de Icaza创建,最初旨在成为Linux和MacOS的.NET Framework版本。因此,它具有许多与.NET Framework相同的API。
.NET Core是.NET Standard的跨平台实现。因此,它只能访问.NET Standard中概述的API。
使用.NET Core构建的应用程序需要在目标计算机上安装.NET Core运行时才能运行它们(取决于您是否进行自包含部署或框架依赖部署)。可以通过前往dot.net/core来获取.NET Core运行时和SDK。
同样,使用Mono构建的应用程序将需要在目标计算机上安装Mono运行时。
正如Lexi-Li指出的那样,我建议您查看.NET Core的官方文档以了解不同的部署选项。

Mono和.NET Core的目标是否相似/相同?它们只是为了拥有跨平台的.NET实现吗? - BlueMonkMN
@BlueMonkMN:不是的。Mono和.NET Core并不提供相同的东西。Mono为完整的.NET框架提供了一种实现方式。.NET Core仅提供了.NET的“核心”版本。如果你需要建议,那就选择.NET Core吧。 - Stefan Steiger
但目标相似,都是提供.NET的跨平台实现。唯一的区别在于,.NET Core是核心子集,而Mono是来自不同供应商的完整实现? - BlueMonkMN
1
如果对@BlueMonkMN有所帮助,Mono是在2004年开始的,而.NET Core是在过去几年中开始的(Satya Nadella在2014年宣布)。Mono从未那么出色,因为它最初只是使用提供的.NET Framework文档创建的,而.NET Core开发完全是由.NET基金会(其中包括微软、谷歌和三星等公司)进行开源开发的。 - Jamie Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接