9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2017-12-14
  • 本文字数:1020 字

    阅读完需:约 3 分钟

从.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

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2017-12-14 18:001557
用户头像

发布了 391 篇内容, 共 120.7 次阅读, 收获喜欢 254 次。

关注

评论 1 条评论

发布
用户头像
不太明白 为什么不直接迁移到.NET Core 还要先迁移到Asp.NET Core 再迁移过来
2019-02-14 14:47
回复
没有更多了
发现更多内容

NFTScan 与 PANews 在 NFT 数据层面进行战略合作

NFT Research

API NFT 合作 MetaMask

国庆数字游,融云都为您准备好了

融云 RongCloud

GPU是AI时代的算力核心

Finovy Cloud

人工智能 云渲染

还不知道产品帮助中心怎样制作?,来看看这个吧

Baklib

打破线上社交“不可能三角”,语音社交可以做到既要、又要、还要

擎声科技

音视频 sdk 语音社交 实时互动 擎声Qtt

OptaPlanner场景和示例

成长兔🐇

【译】日志:每个软件工程师都应该了解实时数据的统一抽象【三】

Rae

kafka 日志 原理

还在为产品的客户服务而烦恼?来搭建在线客服中心!

Baklib

第56届世乒赛团体赛开幕!三思近900㎡ LED显示点燃赛事激情

电子信息发烧客

面试官问我 JS 中 foreach 能不能跳出循环

茶无味的一天

JavaScript js foreach for

Alluxio与北京大学计算机学院签署合作框架协议,推动产学研深度融合

Alluxio

开源 云原生 产学研用 Alluxio 北京大学

基于边缘计算的渲染新应用

火山引擎边缘云

边缘计算 渲染 边缘云 渲染性能 渲染服务

产品的帮助中心怎么建设?关于编辑帮助文档的几个小技巧~

Baklib

新品速递|海泰边缘安全网关护航工控数据采集

电子信息发烧客

安利几款简单好用的帮助文档制作工具

Baklib

帮助文档

字符串哈希

留白的艺术

leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)

okokabcd

LeetCode 数据结构与算法

iMazing传输 iPhone 备忘录和通话记录功能

淋雨

ios iphone

好的代码是优质资产、莫让代码成为负债

葡萄城技术团队

给你一本武林秘籍,和KeeWiDB一起登顶高性能

腾讯云数据库

redis 腾讯云 NoSQL 数据库 腾讯云数据库 KeeWiDB

Databricks Data Science&Engineering模块介绍

Jackchang234987

大数据 数据产品经理 数据产品 大数据开发 Databricks

无线网络安全技术中的王牌标准:WPA到底是个什么东东?解决了什么问题?

wljslmz

网络安全 无线技术 9月月更 WAP

工业4.0时代IIoT存储面临哪些挑战

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

使用WIX 进行商业智能OEM打包

葡萄城技术团队

Java: 压缩PDF文档

Geek_249eec

Java PDF 压缩

重磅发布!Orbit 云原生应用全生命周期管理工具上线啦!

CODING DevOps

云原生 Orbit CODING

分享|破世界纪录的OceanBase,如今入选了国际顶会VLDB 2022

OceanBase 数据库

葡萄城受邀参加WOT全球技术创新大会

葡萄城技术团队

zookeeper集群之间如何通讯

浅羽技术

zookeeper 通信 集群 ZooKeeper原理 9月月更

大数据开发应用场景解读

Jackchang234987

大数据 数据开发

微信架构图

Johnny

#架构实战营

  • 扫码添加小助手
    领取最新资料包
使用Windows兼容包简化向.NET Core的迁移_.NET_Jonathan Allen_InfoQ精选文章