BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用Windows兼容包简化向.NET Core的迁移

| 作者 Jonathan Allen 关注 460 他的粉丝 ,译者 盖磊 关注 2 他的粉丝 发布于 2017年12月15日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

从.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属性,并在该属性中列出所有要忽略的平台。

查看英文原文: Easing into .NET Core with the Windows Compatibility Pack

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT