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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nssl1304-最大正方形【二分答案】

正题 题目大意 一个N∗NN*NN∗N的01矩阵,求一个面积最大的全为1的正方形 解题思路 先O(n2)O(n^2)O(n2)预处理hi,jh_{i,j}hi,j​表示在(i,j)(i,j)(i,j)这个位置向右有多少个连续的1。然后二分边长。 时间复杂度:O(n2logn):O(n^2\ log\ n):O(n2 log n) codecodecode…

springboot使用xml配置mybatis

前面用注解配置了mybatis&#xff0c;非常的简单&#xff0c;但是在写动态sql语句的时候会非常的麻烦&#xff0c;所以这边我们用xml来重新配置一下 在resource目录下新建 SqlMapConfig.xml 主配置文件 <?xml version"1.0" encoding"UTF-8" ?> &…

SpringBoot2.1.9 Mybatis多数据源配置

一、配置文件 目录 application.yaml spring:application:name: multi-datasourceprofiles:active: devdatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/base?autoReconnecttrue&ze…

自动类型安全的REST .NET标准库refit

在SCOTT HANSELMAN 博客上看到一个好东西《Exploring refit, an automatic type-safe REST library for .NET Standard》&#xff0c;他推荐了一个.NET标准1.4 的自动类型安全的REST库refit。 refit 类似于Java的Retrofit&#xff0c;是一套RESTful架构的.NET客户端实现&#x…

nssl1305-最大值【dp,数学】

正题 题目大意 求有多少个长度为nnn且由1∼p1\sim p1∼p组成的序列满足在求最大值时交换了kkk次。 解题思路 考虑dpdpdp预处理。 用fi,j,kf_{i,j,k}fi,j,k​表示长度为iii&#xff0c;最大的数是jjj&#xff0c;交换了kkk次 显然有fi,j,kfi−1,p,k−1fi−1,j,k∗j(p<j)f…

spring boot常用注解的作用

Controller层注解 Controller和RestController的区别 RestController注解相当于ResponseBody &#xff0b; Controller合在一起的作用 如果只是使用RestController&#xff0c;无法返回jsp或者html页面 如果使用Controller&#xff0c;需要返回json数据&#xff0c;则必须加…

Visual Studio的语言服务器协议

语言服务器协议&#xff08;LSP&#xff09;是Visual Studio Code的一个重要组件。语言服务器实际上是单独运行的编译器或分析器&#xff0c;它负责处理各种任务&#xff0c;如编译器错误报告、文本悬浮、代码自动完成&#xff08;也就是IntelliSense&#xff09;等。语言服务器…

面试官:为什么 Spring Boot 的 jar 可以直接运行

转载自 面试官&#xff1a;为什么 Spring Boot 的 jar 可以直接运行 来源&#xff1a;Gormats Notes fangjian0423.github.io/2017/05/31/springboot-executable-jar/ Spring Boot Loader抽象的一些类 JarLauncher的执行过程 关于自定义的类加载器LaunchedURLClassLoader …

jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】

正题 题目大意 有nnn个人mmm辆车。 人有tit_iti​&#xff0c;车有fjf_jfj​。第i个人修第j俩车时间是ti∗fjt_i*f_jti​∗fj​。 一辆车要每个人都修一遍&#xff0c;且一个人修好后要求下一个人没有工作。对于每辆车找一个修理开始时间要求总修理时间最小(得按顺序修)。 解题…

jzoj3170-[GDOI2013模拟4]挑选玩具【容斥,状态压缩,分治】

正题 题目大意 有nnn个箱子放了若干个玩具&#xff0c;要求选择一些箱子使得mmm种玩具都有&#xff0c;求方案总数。 解题思路 设fSf_SfS​表示选择只有在集合为SSS的方案数。 然后答案考虑容斥&#xff0c;那么答案就是∑S(2(f(∼S))−1)∗(−1)∣S∣\sum_S (2^{(f_{(\sim S…

Spring Boot 消息队列 RocketMQ 入门

转载自 芋道 Spring Boot 消息队列 RocketMQ 入门 摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/RocketMQ/ 「芋道源码」欢迎转载&#xff0c;保留摘要&#xff0c;谢谢&#xff01; 本文在提供完整代码示例&#xff0c;可见 https://github.com/YunaiV/SpringBoot-Lab…

python正则获取网页标签里面的内容

# -*- coding:utf-8 -*- import re str "<option value2018010401>2018级播音与主持艺术1班</option><option value2018080601>2018级财务管理1班</option><option value2018080602>2018级财务管理2班</option><option value2018…

C#和NewSQL更配 —— TiDB入门

一、背景在上一篇尝试CockroachDB&#xff08;传送门在此&#xff1a;http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html&#xff09;的过程中&#xff0c;发现如果从常规的RDBMS迁移过去几乎是不太可能的事情&#xff0c;所以掉头开始调研一下也是这2年比较火…

jzoj3171-[GDOI2013模拟4]重心【真·物理,二分】

正题 题目大意 若干个长2高1的长方形且有不同的质量。 对于若干个矩形的重心定义为∑mi∗xi∑mi\frac{\sum m_i*x_i}{\sum m_i}∑mi​∑mi​∗xi​​ 要求每个矩形上面的所有矩形的x重心跟该矩形的x中点相距不超过1。 最底下的矩阵的右下角摆放在(−2,0)(-2,0)(−2,0)的位置求…

Mysql调优你不知道这几点,就太可惜了

转载自 Mysql调优你不知道这几点&#xff0c;就太可惜了 一、Mysql的逻辑分层 Mysql分为&#xff1a;连接层、服务层、引擎层、存储层。 当客户端向服务端发起操作请求的时候&#xff0c;执行过程是这样的&#xff1a; 1、客户端端与Mysql服务端的连接层建立连接&#xff…

DOMException: Failed to execute ‘appendChild‘ on ‘Node‘: This node type does

在使用nuxt时出现了下面得错误 DOMException: Failed to execute ‘appendChild’ on ‘Node’: This node type does 最后把created里的方法放到mounted里就行了

Unity/DotNetty中集成Lidgren实现可靠UDP

lidgren有几个优点&#xff1a;分channel&#xff0c;每个channel都有单独的消息队列&#xff0c;不互相影响。每个消息可以单独选择使用可靠/不可靠传输。支持内网穿透自带加密算法。前端Unity&#xff1a;先贴一张前端使用的网络框架图&#xff1a;Lidgren的Github地址&#…

欢乐纪中A组周六赛【2019.4.13】

前言 做A组被虐好惨 成绩 RankRankRank是有算别人的 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC222巨佬WHF巨佬WHF巨佬WHF140140140404040100100100000222巨佬ZZY巨佬ZZY巨佬ZZY140140140404040100100100000555巨佬HJW巨佬HJW巨佬HJW10010010010010010000000014…

@restcontroller和@controller区别

共同点&#xff1a;都是用来表示Spring某个类的是否可以接收HTTP请求 不同点&#xff1a; controller表示的是一般是页面处理 restcontroller则是json字符串常用的法则

面试官问:如果MySQL引起CPU消耗过大,你会怎么优化

转载自 面试官问&#xff1a;如果MySQL引起CPU消耗过大&#xff0c;你会怎么优化 谁在消耗cpu? 用户系统IO等待软硬中断空闲 祸首是谁&#xff1f; 用户 用户空间CPU消耗&#xff0c;各种逻辑运算 正在进行大量tps 函数/排序/类型转化/逻辑IO访问… 用户空间消耗大量cpu&…