使用Windows兼容包简化向.NET Core的迁移
来源:互联网 发布:菲律宾跳水队 知乎 编辑:程序博客网 时间:2024/06/09 05:29
从.NET迁移到.NET Core的一个主要原因,在于后者具备在Linux上运行的能力。但是对于大型企业应用,不可能实现一步迁移到位。由此,Microsoft推荐采用一种逐步迁移做法:
第一步,迁移到ASP.NET Core(依然使用.NET Framework);
第二步,迁移到.NET Core(依然运行在Windows上);
第三步,迁移到Linux上;
第四步,迁移到(托管Linux主机的)Azure中。
这一做法理论上可行,但是在第二步中会有阻碍,因为缺乏关键API。用于.NET Core的Windows兼容包的推出,意在解决这一问题。该兼容包是一个NuGet软件包集合,其中包含了近两万个API,目的在于解决Web应用程序开发人员对于优秀软件库的需求。
新引入的API大体上可分为两类。一类是仅适用于Windows的API,另一类是跨平台的软件库。其中,仅适用于Windows的API包括:
Active directory;
加密;
事件日志和性能计数器;
文件系统安全;
命名管道;
注册表访问(Registry Access);
Windows服务。
其中大部分API是与Windows操作系统紧密关联的,而相应的Linux API通常在设计上迥异。
跨平台的软件库包括:
缓存;
配置管理(ConfigurationManager),即处理遗留的app.config和web.config文件;
数据集扩展(DatasetExtensions),用于不使用ORM访问数据库;
ODBC数据库访问;
System.Configuration.ConfigurationManager(MEF v1);
System.Drawing;
System.IO.Packaging,用于与MS Office类型的压缩文件交互;
System.ServiceModel,即WCF(Windows Communication Foundation)。
需指出的是,这些API是刻意独立于.NET Core的完整发布的。对此,Microsoft的Immo Landwerth给出了如下解释:
以独立软件包提供的原因在于:(一)不少API是仅出于兼容性的考虑而提供的。在新代码中,不应依赖于这些API;(二)不少API仅用于Windows平台。我们不希望将用户引上一条更难以跨平台迁移应用的道路。
为了易于区分仅适用于Windows的和跨平台的API,现在有一种API兼容性分析工具可用。该工具可以标记出那些在应用中不应继续依赖的API。
你可以使用与弃用API相同的抑制选项,但是也可以选择对特定平台给出抑制警告。如果你仅规划在一组特定的平台上支持你的代码,例如只支持Windows和Linux但不支持macOS,这一工具十分有用。为此,你只需编辑项目文件,添加一个PlatformCompatIgnore
属性,并在该属性中列出所有要忽略的平台。
原文:http://www.infoq.com/cn/news/2017/12/Windows-Compatibility-Pack
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
- 使用Windows兼容包简化向.NET Core的迁移
- 使用Api分析器与Windows兼容包来编写智能的跨平台.NET Core应用
- 向ASP.NET Core迁移
- .net core 数据迁移
- 度量.net framework 迁移到.net core的工作量
- .NET Core项目从xproj+project.json向csproj迁移简介
- .net core 2.0学习笔记(三):度量.net framework 迁移到.net core的工作量
- Asp.Net Core-Identity迁移
- .Net Core迁移到MSBuild的多平台编译问题
- 如何迁移#SNMP到.NET Core平台的一些体会
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
- 迁移.net framework 工程到.net core
- Entity Framework Core使用迁移
- Windows 上 .NET Core 的先决条件
- ASP.NET Core 静态文件及JS包管理器(npm, Bower)的使用
- 在ASP.NET Core中使用AOP来简化缓存操作
- android v7兼容包RecyclerView的使用
- .Net Core迁移到MSBuild平台
- Codeforces Round #451 (Div. 2) A-C题解
- Codeforces Round #451 (Div. 2)题解
- Visual Studio的语言服务器协议
- 1003. Emergency (25)(floyd)
- 自动类型安全的REST .NET标准库refit
- 使用Windows兼容包简化向.NET Core的迁移
- hibernate配置文件
- haskell学习笔记(1)
- 页面呈现
- 单例模式浅谈
- 【BZOJ】3007 拯救小云公主 最短路径
- 线程池的原理及实现
- mongodb安装
- 数据库事务与锁详解