.NET Core 跨平台和老项目移植探究

# 可移植性探究

1
2
可移植的平台越多,可使用的api越少
最少的情况就是只能使用 .net standard的 api

介绍

1 .net standard类库

在选择一个.NET标准版本时,你应该考虑这个权衡:

  • 版本越高,可用的API就越多。
  • 版本越低,可以运行的平台就越多。
  • .net standard 基本可以满足业务层向下的迁移。
  • 也就是说老项目UI层必须要重写。

2 .net Core 2.0

1
2
3
4
5
在 .NET Standard2.0中API支持数量增多,包含API数量为32000个。
.NET Standard 1.6中API数量为13000个。
目前为止已经包含 .NET Framework中的大部分APIs,
这意味着可以轻松地将现有代码移植到.NET Standard,
从而使现有代码支持基于.NET Standard实现的任何平台。

选择


.net Framework vs .net core


在以下情况,对服务器应用程序使用 .NET Core:

  • 用户有跨平台需求。
  • 用户正在面向微服务。
  • 用户正在使用 Docker 容器。
  • 需要高性能和可扩展的系统。
  • 需按应用程序提供并行的 .NET 版本。

在以下情况,对服务器应用程序使用 .NET Framework :

  • 应用当前使用 .NET Framework(建议扩展而不是迁移)。
  • 应用使用不可用于 .NET Core 的第三方 .NET 库或 NuGet 包。
  • 应用使用不可用于 .NET Core 的 .NET 技术。
  • 应用使用不支持 .NET Core 的平台。

ASP .NET vs ASP .NET Core


image


.NET 可移植性分析器 (分析现有类库各运行时类库支持情况)

分析器支持vs2017/vs2015

如何使用
1下载安装

略(安装过程自动且无任何选项)

2 简单使用

安装完成后 vs菜单中会多出(下图)这么几个菜单,第一个是分析,第二个是分析配置,第三个是查看分析报表。

image

分析测试:

  1. 点击设置,设置需要分析的运行时
  2. 点击分析,选择需要分析的.net dll
  3. 点击报告,查看分析结果

分析结果:
image

image

Windows 兼容性包

Windows 兼容性包通过 NuGet 包 Microsoft.Windows.Compatibility 提供,可从面向 .NET Core 或 .NET Standard 的项目引用。

Windows 兼容性包 + .net Standard 约等于 .net framework


从 .NET迁移到.NET Core的一个主要原因,在于后者具备在Linux上运行的能力。但是对于大型企业应用,不可能实现一步迁移到位。由此,Microsoft推荐采用一种逐步迁移做法:

  • 第一步,迁移到ASP .NET Core(依然使用 .NET Framework)
  • 第二步,迁移到 .NET Core(依然运行在Windows上)
  • 第三步,迁移到Linux上

  • 第一步迁移基本上没有什么困难
  • 第二步迁移会存在有些windows平台特有的api无法迁移,这个使用windows兼容包就发挥作用了
  • 第三步迁移需要替换掉windows特有的api

###

坚持技术分享,您的支持将鼓励我更好的创作!