.net - .NET 框架?还是 .NET 核心?还是 .NET 标准?或者以上都不是?
问题描述
我有一些使用 .NET Framework 4.7.2 用 .NET 编写的私有库和程序,其中大部分是 WinForms,但也有一些已经用 WPF 编写。
我有一些所有程序都使用的基本库,然后我通常每个程序都有一个库,使用基本库并为该程序提供业务逻辑,最后我使用基本库和程序本身(可执行)这个程序的一个业务逻辑库来构建 UI。
现在我想移植其中的一两个程序以在 Android 上运行,并且我想为此使用 Xamarin。
谷歌搜索后,我了解到我不能再使用 .NET Framework 作为基础,因为 .NET Framework 仅适用于 Windows。但是我没有得到什么可以使用?
.NET Core 似乎是一个候选者,但如果我理解正确的话,.NET Core 只会在不同平台上重用相同的源代码,而不是编译后的文件本身。而微软在谈到跨平台能力时总是只提到 Windows、Linux 和 OS X。安卓呢?在那种情况下,“Linux”是否涵盖了这一点?
比方说,我必须移植三个基本库,即业务逻辑库和程序。
我现在拥有在 Android 和 Windows 桌面上运行的程序,具有相同的基本库和业务逻辑库源代码。
我所有的其他程序(未移植)也使用这三个移植的基础库。
现在我想更改我移植的基础库之一中的代码。我现在必须使用更改后的基础库重新编译任何程序,我不能只更改文件就完成了吗?
.NET Standard 似乎是另一种选择。据我了解,我可以使用 .NET Standard 创建一个基础库并从 .NET Core 或 .NET Framework 引用该文件,对吗?但是我也可以从 Android 中引用这个库(使用 Xamarin)吗?
让一个长问题简短......我必须做什么,创建一个基本库文件(例如一个用于访问 SQLite 数据库的文件)并能够在 Xamarin(适用于 Android)和 Windows 中引用这个基本库文件来自使用 .NET Framework 的其他组件。
这甚至可能吗?
解决方案
有几种不同的 .NET 实现,它们各自服务于不同的目的。.NET 框架是最初的实现,只能在 Windows 上运行。然后,Xamarin Inc. 创建了Mono。它被构建为 .NET 框架的开源版本。适用于 Android 和 iOS 的 Xamarin 使用 Mono 作为 .NET 运行时,因为它具有最小的尺寸和最轻的占用空间。
接下来,开源运动开始了,微软创建了 .NET Core,它作为类似于 Mono 的开源跨平台实现。顺便说一句,.NET 核心二进制文件可以在任何 .NET 核心运行时跨平台运行。没有实现整个框架,Microsoft 创建了 .NET 标准。它不是一种实现,它是任何 .NET 实现必须具有的二进制格式和 API 的规范。(注意:我不完全确定它们实际创建和标准化的顺序)。
几乎所有 .NET 库都应该按照 .NET 标准进行编程,因此您可以在这三种实现中的任何一种上使用它们。
推荐阅读
- ruby-on-rails - Solargraph + Docker 无法绑定到不同的接口
- r - 将来自同一数据帧 r 的两行相乘
- powershell - 检查文件是否存在,如果不存在,显示一个消息框
- python - 打开一个进程并捕获标准输出并发送自定义按键
- c# - What is a better way of selecting XML Nodes with different levels of hierarchy for comparing values?
- java - Trying to prompt the user to re-enter from the catch block, but the catch block terminates?
- javascript - 如何将节点 js 包添加到 Meteor 应用程序?
- postgresql - Postgresql 全文匹配意外
- performance - 预取指令是否需要在退出前返回结果?
- cassandra - Session.executeAsync 的查询限制是多少?