【问题标题】:Understanding .Net Core and Mono了解 .Net Core 和 Mono
【发布时间】:2018-05-06 07:33:52
【问题描述】:
  1. .Net Core 中开发应用程序时,.NET 依赖项和 DLL 会嵌入到应用程序中吗?这是否意味着我不需要需要在客户端 PC 上安装 .Net 依赖项?
  2. 如果我为 Linux 开发 .Net Core 控制台应用程序,是否需要在装有 Linux(客户端)的 PC 上安装 Mono
  3. .Net core 应用程序是否与 Android 兼容?

【问题讨论】:

  • 从@987654321 开始@ 自包含部署部分应该会给你答案。
  • 在 GitHub 上 github.com/qmfrederik/coredroid 上有一个适用于 Android 的 .NET Core 的实验性构建,但由于 Miguel de Icaza 的团队正在 Xamarin 上进行的工作,我们可能很快就不需要它了。

标签: .net linux .net-core


【解决方案1】:

你的问题:

不,应用程序中没有嵌入依赖项(.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 引用了 native-dll(它作为嵌入式资源提供),但没有提供必要的 C-Runtime-libraries(例如,当 native-dll/.so 被动态链接时,您仍然会遇到问题 - 例如就像在 SkiaSharp 中一样)。

另外,.NET-Core 可以使用 shared-framework 运行,这意味着部署规模更小,但必须安装 shared-framework-version。

  1. 由于 Android 是 linux - 而且您没有在 x86-32 处理器或 ARM-64 处理器上运行的 Android,.NET-Core 应该与 Android 兼容。我从未测试过这个前提。可能会带来错误。 ARM 支持是粗略的。

但是,我不清楚您想在 Android 上使用 .NET Core 做什么。 由于 .NET 没有实现任何 Android-UI 接口。 Xamarin-Forms 可能支持带有 .NET-Core 的 Android-UI - 它当然支持单声道。但是,您可以在 Android 上运行 web/other-server 或控制台应用程序。

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 运行时才能运行它们(取决于您是进行自包含部署还是依赖于框架的部署)。 .NET Core 运行时和 SDK 可以通过 dot.net/core 获取。

    同样,使用 Mono 构建的应用程序需要在目标机器上安装 Mono 运行时。

    正如 Lexi-Li 指出的那样,我会查看 The official documentation for .NET Core 以了解有关不同部署选项的更多信息。

    【讨论】:

    • Mono 和 .NET Core 的目标是否相似/相同?是否只是为了拥有一个跨平台的 .NET 实现?
    • @BlueMonkMN:不,不是。 mono 和 .NET Core 不提供相同的功能。 Mono 为 FULL .NET-Framework 提供了一个实现。 .NET Core 仅提供 .NET 的“Core”版本。如果您需要推荐,请使用 .NET-Core。
    • 但目标类似,提供.NET的跨平台实现。区别仅在于 .NET Core 是核心子集,而 Mono 是来自不同供应商的完整实现?
    • 如果有帮助 @BlueMonkMN,Mono 早在 2004 年就开始了,而 .NET Core 是在过去几年开始的(Satya Nadella 早在 2014 年就宣布了它)。 Mono 从未如此出色,因为它最初是使用提供的有关 .NET Framework 的文档创建的,而 .NET Core 开发是由 .NET 基金会(包括微软、谷歌和三星等)完全开源完成的跨度>
    猜你喜欢
    • 2022-12-17
    • 2017-01-19
    • 1970-01-01
    • 2019-06-09
    • 2021-08-23
    • 2020-11-04
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多