发布 Rafy .NET Standard 版本 Nuget 包

去年年中,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 NS2
                   var 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 中的一些其它公共插件也都支持了多版本。以后会不定期升级每一个插件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

.Net Core下通过Proxy 模式 使用 WCF

.NET Core下的WCF客户端也是开源的,这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.N...

23750
来自专栏张善友的专栏

另一个强大的Visualizers :Mole For Visual Studio

前面介绍了一个 好用的WCF Visualizers ,这里有一个可以看几乎开发中应用到对象的,叫做Mole,最新版本是 4.2。安装和说明看这里:http:/...

21060
来自专栏一棹烟波

文件操作常用函数

文件重命名: rename(inFilePath.c_str(), outFilePath.c_str()) 文件移动(剪切): MoveFileA(inFil...

37650
来自专栏开发与安全

学习 Android Application Security Series 时需要注意的一些点

最近想扩展学习下 Android 应用安全,找到一份入门指引  ,大概走了一遍,有一些注意的点且记下。 1. 建议下载的 Appie 版本为 2.0,因为作者写...

20400
来自专栏跟着阿笨一起玩NET

VS扩展CodeMaid代码整理插件

本文章转载:http://www.cnblogs.com/wintersun/p/3577039.html

1K10
来自专栏开发与安全

linux系统编程之进程(五):终端、作业控制与守护进程

一、终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal)...

28590
来自专栏黑泽君的专栏

Qt Creator新安装后运行一个程序后,出现错误:Error while building/deploying project dict-qt (kit: Desktop Qt 5.10.0 Mi

1、环境介绍:在windows10 Pro下,当前Qt Creator版本,如下图所示:

1.8K20
来自专栏张善友的专栏

通过Jexus 部署 dotnetcore版本MusicStore 示例程序

ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity...

21760
来自专栏河湾欢儿的专栏

npm

Npm: Node Package management node包管理工具; npm :Npm -v ------npm install 模块名称 ...

23710
来自专栏python3

python自动化脚本nginx_status

运维自动化,已经成为运维必不可少的一部分,下面附上自己写的监控nginx_status脚本,大神轻喷

10510

扫码关注云+社区

领取腾讯云代金券