zoukankan      html  css  js  c++  java
  • 发布 Rafy .NET Standard 版本 Nuget 包

    **img **

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

  • 相关阅读:
    A Bug's Life POJ 2492
    First Training
    洛谷----P1162 填涂颜色
    软考知识点梳理--软件测试
    软考知识点梳理--面向对象方法
    软考知识点梳理--国家信息化体系六要素
    软考知识点梳理--电子政务
    软考知识点梳理--激励理论
    软考知识点梳理--承建方项目论证
    软考知识点梳理--项目成本类型
  • 原文地址:https://www.cnblogs.com/zgynhqf/p/9015478.html
Copyright © 2011-2022 走看看