拥抱.NET Core,如何开发一个跨平台类库

在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读。

在本文将介绍如何配置类库项目支持不同的平台,并为不同的平台进行兼容的编码。


创建一个.NET Core类库

首先我们创建一个.NET Core的类库项目。

结构如下


设置项目支持的平台

我们打开“project.json”文件,会看到如下内容:

其中“framework”就是用来配置所支持的目标,默认为netstandard1.6。

要点回顾

问:netstandard1.6可以被应用在哪些平台之上?(这里大家可以回忆一下)

答:

  1. netcoreapp 1.0+(.NET Core)

  2. net4.6.3(.NET Framework)

如果你的答案跟此一致,那么恭喜你已经基本掌握了各个平台直接的关系了。

支持net4和netcoreapp

接着我们想让类库支持目标的为:net4 net45 netcoreapp。

根据上一篇的内容我们可以了解到,可以通过降低netstandard版本以来兼容更多的net平台,其中netstandard1.1就可以支持net45,也就是说如果我们把netstandard1.6改为netstandard1.1就可以达成net45和netcoreapp1.0的支持,(这种方式是理论上最优的,但可能只是一个梦,具体的会在下面的章节指出为什么),看上去像这样:

现在这个类库可以兼容net45+和netcoreapp1.0+,那么net40呢?上篇的内容中说net40根本没有对netstandard做兼容。

是的,net40没有对netstandard做兼容,所以我们需要单独设置一个新的目标,标识类库同时需要被netstandard和net4使用。

这边的netstandard和net4是一个互不兼容的分支。修改后文件像这样子:


如何编码?

设定了不同的平台后,在编码方式上又有哪些区别?

我们首先考虑一个问题,net45和net4是同一种性质的实现,只不过前者是后者的升级版,所以net4的大部分代码net45可以无缝支持,也就是说基于net4的代码不需要改动就可以让net45进行支持。

但netstandard是个新目标,其中包含了许多net平台上没有的类库,比如:wcf,System.Web.dll等,那么改如何在一个项目中与net4、net45共存呢?

我们来看一下“Class1.cs”代码文件

可以看到在左上方的下拉框中列出了这个类库所支持的平台,点击选中其中一个平台可以设置开发环境为这个选中的平台。

接着让我们写个Hello World。

这是一个很简单的写法,可以发现Task.FromResult(“rabbit”)不支持net4,那么我们就需要利用“条件编译符”设置在net4环境下的兼容代码,修改之后看上去如下:

根据项目框架选择的不同ide会自动高亮当前生效的代码。

这样我们就完成了GetName方法net4+和netstandard1.1的支持了。

那么大家在回顾一下现在支持哪些平台?

  1. net4

  2. net45

  3. net451

  4. net452

  5. net4.6

  6. net4.6.1

  7. net4.6.2

  8. net4.6.3

  9. netcoreapp1.0

  10. uap10.0

  11. win8.0

  12. win8.1

  13. wpa8.1

  14. Mono/Xamarin Platforms

  15. mono

是不是一下变得高大上,除了net4外其余的都依靠netstandard的强大支持。

是不是netstandard版本越小越好?

答案是否定的,虽然netstandard可以兼容更多平台但有个很致命的缺点就是为了兼容损失了很多类库和新特性,比如:

这个属性在net4.6之后才被支持也就是说netstandard1.3+才可以使用此属性。

当然这只是很小的一个例子,还有更多的组件不支持低版本。这意味着你得最更多的兼容操作,而有一些类库的缺失可能是致命的。

所以大家在编写类库的时候把我一下兼容的度,一般来说支持.net45+netcoreapp1.0+就可以了。


看清“framework”的本质

以上的项目开发方式给我们照成一个错觉,它就是一个东西,同样的编码,同样的项目文件。

其实不同的framework中是完全独立的,共享的只是文件而已,framework配置的越多你项目的生成速度越慢

为什么呢?让我们看一下vs的输出窗口。

有次可以看出在生成环境vs将不同的framework区别看来,进行单独生成,上面我们配置了两个平台,vs就执行了两次生成,项目越大框架越多生成越慢。

所以不要被表明混淆,在进行编码的时候要记清楚他们是两个独立的东西,只不过在开发方式上微软做出了优化。


写在最后

本文介绍了开发一个跨平台类库的基本做法,接下来会接着介绍:

  1. 不同框架直接的依赖(引用的包和程序集)

  2. 如何将.NET Core类库项目打包成nuget包

  3. 如何让旧的.NET Framework项目使用这个跨平台类库。

  4. 跨平台类库不同目标中代码兼容的小技巧

原文地址:http://www.cnblogs.com/ants/p/5740473.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

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

相关文章

常用的推荐算法小结

转载自 常用的推荐算法小结推荐系统的必然 互联网发展到现阶段,信息已经不是匮乏,而是爆炸。所以良好的用户体验就是把用户喜欢的,感兴趣的从大量的数据中筛选出来,再呈现给用户,实现千人千面的效果。 所以推荐系统的…

.NET 4.6.2正式发布带来众多特性

虽然大多数人的注意力都集中在.NET Core上,但与原来的.NET Framework相关的工作还在继续。.NET Framework 4.6.2正式版已于近日发布,其重点是安全和WinForms/WPF/ASP.NET/WCF相关的特性,英文博客文章https://blogs.msdn.microsoft.com/dotnet/2016/08/02…

推荐算法-关联分析(关联规则)

转载自 推荐算法-关联分析(关联规则)关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。或者说,关联分析是发现交易数据库中不…

动态网页开发基础【笔记】

一、C/S结构和B/S结构1.C/S(Client/Server):客户端服务程序,控制台程序,window应用2.B/S(Browser/Server):浏览器服务程序[java:jsp应用;C#:asp.net],web应用程序区别:C/S:客户端和服务器端都需要开发&…

ASP.NET Core 中文文档 第三章 原理(2)中间件

原文:Middleware作者:Steve Smith and Rick Anderson翻译:刘怡(AlexLEWIS)校对:许登洋(Seay) 章节: 什么是中间件用 IApplicationBuilder 创建中间件管道内置中间件编写中间件扩展资源 查看或下载样例代码 什么是中间件…

关联分析:FP-Growth算法

转载自 关联分析:FP-Growth算法关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。关联分析的一个典型例子是购物篮分析。通过发现顾客放入购物篮中不同…

sql server链接查询

一、连接结果集中有多个表的信息时用连接查询1.内连接:多个表根据公共列连接,符合条件的显示,不符合条件的不显示 2.外连接:多个表根据公共列连接,显示一个表中的所有信息,另个表中中符合条件的信息,不符合条件的用nul…

ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

原文:Application Startup作者:Steve Smith翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398)、许登洋(Seay) ASP.NET Core 为你的应用程序提供了处理每个请求的完整控制。Startup 类是应用程序的入口(entry point)…

基于内容的推荐(Content-based Recommendations)

转载自 基于内容的推荐(Content-based Recommendations)Collaborative Filtering Recommendations (协同过滤,简称CF) 是目前最流行的推荐方法,在研究界和工业界得到大量使用。但是,工业界真正使用的系统一般都不会只…

[置顶]动态网页开发基础【笔记】

一、C/S结构和B/S结构1.C/S(Client/Server):客户端服务程序,控制台程序,window应用2.B/S(Browser/Server):浏览器服务程序[java:jsp应用;C#:asp.net],web应用程序区别:C/S:客户端和服务器端都需要开发&…

ASP.NET Core 中文文档 第三章 原理(3)静态文件处理

原文:Working with Static Files作者:Rick Anderson翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398)、许登洋(Seay)、孟帅洋(书缘) 静态文件(static files),诸如 HTML、CSS、图片和 JavaScript 之类的…

使用IDEA Maven搭建Mybatis环境

本文是使用IDEA Maven搭建Mybatis环境 涉及到的搭配环境 JDK1.8 Maven3.6.3 IDEA2019 MySQL数据库 一、Maven介绍 Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理,是一个自动化构建工具。 自动化构建工具:将原材料&…

常用推荐算法

转载自 常用推荐算法在推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤…

不该活着的SqlHelper和DBHelper

前言: 还记得刚学ADO.NET的情景么? 还记得当年是怎么从ADO.NET被忽悠到用SqlHelper的么? 话说从入门到走上工作岗位那些年,我们就一直被纯纯地教导或引导,ADO.NET太原始,得封装成SqlHelper或DBHelper......…

使用IDEA配置Mybatis-Plus框架

使用IDEA配置Mybatis-Plus框架 本文是以使用IDEA配置Mybatis-Plus框架作为简单的讲解。 所涉及到的应用: IDEA2019Mybatis-Plus框架Mysql数据库Maven3.6.3jdk1.8 一、什么是Mybatis-Plus框架? MyBatis-Plus(简称MP)是一个MyBatis的增强工具&#xff…

css实现一级下拉菜单

涉及到的图片请到这里下载 涉及到的图片请到这里下载 涉及到的图片请到这里下载 html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…

UserCF,基于用户的协同过滤算法

转载自 UserCF,基于用户的协同过滤算法UserCF&#xff1a;User Collaboration Filter&#xff0c;基于用户的协同过滤 算法核心思想&#xff1a;在一个在线推荐系统中&#xff0c;当用户A需要个性化推荐时&#xff0c;可以先找到和他有相似兴趣的其它用户&#xff0c;然后…

用BenchmarkDotNet给C#程序做性能测试

BenchmarkDotNet是一个用MIT协议开源的C#程序性能测试的一个库&#xff0c;非常简单易用。 用法 安装NuGet包&#xff0c;BenchmarkDotNet在需要做性能测试的方法前加上属性[Benchmark]。在Main函数调用性能测试var summary BenchmarkRunner.Run<Md5VsSha256>();。 工作…

ItemCF,基于物品的协同过滤算法

转载自 ItemCF,基于物品的协同过滤算法ItemCF&#xff1a;Item Collaboration Filter&#xff0c;基于物品的协同过滤 算法核心思想&#xff1a;给用户推荐那些和他们之前喜欢的物品相似的物品。 比如&#xff0c;用户A之前买过《数据挖掘导论》&#xff0c;该算法会根据此行…

用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

Swagger是一个描述RESTful的Web API的规范和框架。如果使用ASP.NET的话&#xff0c;可以用Swashbuckle来自动生成Swagger,具体参考如何使 WebAPI 自动生成漂亮又实用在线API文档。下面详细的介绍一下如何给ASP.NET Core的项目自动生成Swagger的API帮助文档。 创建ASP.NET Core的…