去年年中,Rafy 框架的源码就已经支持了 Net Standard 2.0 版本。其开源代码也已经上传到 Github 中:https://github.com/zgynhqf/rafy/tree/NetStandard2.0 。但是这都只是在源码层面支持 NS2.0,并没有发布其正式的 Nuget 包。要使用这个版本的开发者,不得不自己下载源码进行编译。

最近,使用 Net Core 的开发者越来越多。所以我们决定发布一个正式的 Nuget 包,以方便 Net Core 的开发都可以方便地下载、更新 Rafy 框架进行使用。

发布后,开发者在 Nuget 中再搜索 Rafy 的最新版本时,就已经支持 Net Standard 2.0 了:

项目支持多版本的改造步骤

过程中其实没有想到,要发布一个同时支持 Net Standard 2.0 和 Net Framework 4.5 版本的 Nuget 包,还是比较繁琐的。需要将原来的两个分支的代码合并到一起,并通过预处理命令来分别编译为不同版本。

下面,简单记录一下一些重要的步骤:

  • 创建并使用新的 Net Standard 项目文件格式来创建。

  • 修改 Rafy.csproj 文件,使其支持多个 .NET 版本:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
  • Rafy.csproj 文件中,为不同的版本添加不同的引用:

<ItemGroup Condition="'$(TargetFramework)' == 'net45'"><Reference Include="PresentationFramework" /><Reference Include="System" /><Reference Include="System.Configuration" /><Reference Include="System.Core" /><Reference Include="System.Runtime.Caching" /><Reference Include="System.Runtime.Serialization" /><Reference Include="System.ServiceModel" /><Reference Include="System.Transactions" /><Reference Include="System.Web" /><Reference Include="System.Xaml" /><Reference Include="System.Xml.Linq" /><Reference Include="System.Data.DataSetExtensions" /><Reference Include="Microsoft.CSharp" /><Reference Include="System.Data" /><Reference Include="System.Xml" /><Reference Include="WindowsBase" /><PackageReference Include="Castle.Core" Version="4.1.1" /><PackageReference Include="Newtonsoft.Json" Version="10.0.3" /></ItemGroup><ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"><PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.0.0" /><PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" /><PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.0" /><PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" /><PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" /><PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0" /><PackageReference Include="Newtonsoft.Json" Version="10.0.3" /><PackageReference Include="System.ComponentModel" Version="4.3.0" /><PackageReference Include="System.ComponentModel.TypeConverter" Version="4.3.0" /><PackageReference Include="System.Data.Common" Version="4.3.0" /><PackageReference Include="Castle.Core" Version="4.1.1" /><PackageReference Include="System.Data.SqlClient" Version="4.4.0" /></ItemGroup>
  • 还可以自定义一些缩写的常量:

<PropertyGroup Condition="'$(TargetFramework)'=='netstandard2.0'"><DefineConstants>NS2</DefineConstants></PropertyGroup>
  • 修改合并后的项目中的所有相关代码,都使用预处理命令来区别不同的版本,如:

           private void EnsureLoaded()           {                          if (_section == null){                #if NET45_section = ConfigurationManager.GetSection("rafy") as RafyConfigurationSection;                                 if (_section == null) _section = new RafyConfigurationSection();   #endif#if NS2var rafyRawSection = ConfigurationHelper.Configuration.GetSection("rafy");                        if (rafyRawSection == null){                       throw new InvalidProgramException("配置文件中没有 rafy 配置节,请检查配置文件。");}_section = new RafyConfigurationSection();rafyRawSection.Bind(_section);                      #endif}}
  • 配置项目为编译时生成对应的 Nuget 包。

  • 生成,并发布。最终生成的 Nuget 包格式是这样的:

通过上述几步,就使得 Rafy 框架支持了 Net Standard 版本了。同时,我们还把 Rafy 中的一些其它公共插件也都支持了多版本。以后会不定期升级每一个插件。

原文地址: http://www.cnblogs.com/zgynhqf/p/9015478.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

发布 Rafy .NET Standard 版本 Nuget 包相关推荐

  1. 从Nuget官网上下载指定版本Nuget包

    如何使用Nuget软件下载Nuget包已经有许多帖子(如1.2)进行了介绍,但是这种方式需要在电脑上安装Nuget软件. 其实Nuget官网同样可以下载指定版本的Nuget包,例如对于Newtonso ...

  2. 容器环境下如何将NuGet包XML文档添加到Swagger

    容器环境下将NuGet包XML文档添加到Swagger 在.NET Core项目开发过程中,为了实现代码复用,我们将可以重复使用的部分拆分成一个个小的NuGet包.这些NuGet包可以在其他系统中复用 ...

  3. 发布nuget包的正确姿势---cicd自动打包发布

    最轻便的发布nuget包方式,方便cicd自动打包发布nuget包 首先新建项目 项目名随便取,这里就叫它GuiH.ClassLibrary 默认即可,需要改目标版本时,等创建好再改 项目创建好了 随 ...

  4. 使用Azure Pipelines从GitHub发布NuGet包

    [本文目录] ps: 阅读本文大概需要20分钟 欢迎大家点击上方公众号链接关注我,了解新西兰码农生活 什么是 YAML? name/value 名称/值 collections 集合 multiple ...

  5. 基于 .Net Core 的组件 Nuget 包制作 amp; 发布

    微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 . ...

  6. 解决 .net core 中 nuget 包版本冲突问题

    解决 .net core 中 nuget 包版本冲突问题 参考文章: (1)解决 .net core 中 nuget 包版本冲突问题 (2)https://www.cnblogs.com/dudu/p ...

  7. 使用 dotnet-outdated 维护项目 nuget 包版本

    使用 dotnet-outdated 维护项目 nuget 包版本 Intro 我们项目中或多或少都会有一些 NuGet 包,使用到 NuGet 包时,如何保证我们的 NuGet 包不会太旧呢?我们可 ...

  8. [NET Core] Nuget包发布流程

    1.新建一个.NET Core类库 2.新增一个方法,并编译项目 3.下载Nuget.exe,与刚才新建的类库放在同一目录下 下载地址:https://www.nuget.org/downloads ...

  9. pipelines php,Azure DevOps 2020(五)使用 Pipelines 自动化发布 NUGET 包

    相关资源下载 Azure DevOps 2020(一)初识微软 Azure DevOps(TFS) https://www.itsvse.com/thread-9239-1-1.html Azure ...

最新文章

  1. 信号调制疑问_DSM 调制器simulink仿真分析
  2. orange pi java_[中文]Orange Pi家族各大成员一览表
  3. 我花了十多分钟的i698源代码时间
  4. 机器学习(四)高斯混合模型
  5. 《Cortex-M0权威指南》之Cortex-M0技术综述
  6. 红帽企业存储管理之iscsi简单应用
  7. 腾讯技术分享:Android版手机QQ的缓存监控与优化实践
  8. php函数copy和rename的区别
  9. 21天学通mysql_《21天学通JavaWeb》 - 随笔分类 - 疯狂delphi - 博客园
  10. 浅谈微信公众号,微信开放平台和微信商户号的区别
  11. 时间序列分析 | 相似性度量基本方法
  12. 公众号被封小感:你是否拥有绝地反击的能量?
  13. 一文了解 Serverless 究竟是什么
  14. 微信小程序、公众号侵权投诉流程
  15. 春风吹又生(1年工作经验感悟)
  16. jsp 的ne 什么意思
  17. jQuery中$()函数有几种用法
  18. 「 iOS知识小集 」2018 · 第 29 期
  19. 盘点2021年针对我国的网络安全事件!
  20. vue把localhost改成ip地址无法访问—解决方法

热门文章

  1. Idea maven项目不能新建package和class的解决
  2. [MySQL]关于amd.dll后门病毒入侵3306端口的临时解决方案
  3. 智能实验室-全能优化(Guardio) 4.0.0.670 beta 8
  4. dotNet Core使用SignalR实现websocket
  5. C#的dapper使用
  6. Win10 Terminal + WSL 2 安装配置指南
  7. C# Lambda表达式详解,及Lambda表达式树的创建
  8. 欲善其事,先利其器 | IDCF第6期DevOps案例研究回顾(附视频)
  9. Redis集群搭建很easy
  10. Blazor VS React / Angular / Vue.js