如何发布同时支持.net core和.net framework的nuget包

原文:https://blog.csdn.net/quxing10086/article/details/80258422

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

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

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

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

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

    <Project Sdk="Microsoft.NET.Sdk">

  2.  

    <PropertyGroup>

  3.  

    <TargetFrameworks>net45;netstandard2.0</TargetFrameworks>

  • Rafy.csproj 文件中,为不同的版本添加不同的引用:
  1.  

    <ItemGroup Condition="‘$(TargetFramework)‘ == ‘net45‘">

  2.  

    <Reference Include="PresentationFramework" />

  3.  

    <Reference Include="System" />

  4.  

    <Reference Include="System.Configuration" />

  5.  

    <Reference Include="System.Core" />

  6.  

    <Reference Include="System.Runtime.Caching" />

  7.  

    <Reference Include="System.Runtime.Serialization" />

  8.  

    <Reference Include="System.ServiceModel" />

  9.  

    <Reference Include="System.Transactions" />

  10.  

    <Reference Include="System.Web" />

  11.  

    <Reference Include="System.Xaml" />

  12.  

    <Reference Include="System.Xml.Linq" />

  13.  

    <Reference Include="System.Data.DataSetExtensions" />

  14.  

    <Reference Include="Microsoft.CSharp" />

  15.  

    <Reference Include="System.Data" />

  16.  

    <Reference Include="System.Xml" />

  17.  

    <Reference Include="WindowsBase" />

  18.  

    <PackageReference Include="Castle.Core" Version="4.1.1" />

  19.  

    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />

  20.  

    </ItemGroup>

  21.  

  22.  

    <ItemGroup Condition="‘$(TargetFramework)‘ == ‘netstandard2.0‘">

  23.  

    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.0.0" />

  24.  

    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" />

  25.  

    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.0" />

  26.  

    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />

  27.  

    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />

  28.  

    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0" />

  29.  

    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />

  30.  

    <PackageReference Include="System.ComponentModel" Version="4.3.0" />

  31.  

    <PackageReference Include="System.ComponentModel.TypeConverter" Version="4.3.0" />

  32.  

    <PackageReference Include="System.Data.Common" Version="4.3.0" />

  33.  

    <PackageReference Include="Castle.Core" Version="4.1.1" />

  34.  

    <PackageReference Include="System.Data.SqlClient" Version="4.4.0" />

  35.  

    </ItemGroup>

  • 还可以自定义一些缩写的常量:
  1.  

    <PropertyGroup Condition="‘$(TargetFramework)‘==‘netstandard2.0‘">

  2.  

    <DefineConstants>NS2</DefineConstants>

  3.  

    </PropertyGroup>

?

  • 修改合并后的项目中的所有相关代码,都使用预处理命令来区别不同的版本,如:

[c#] view plain copy

  1. <code class="hljs cs" style="vertical-align:middle;background-color:rgb(255,255,255);line-height:1.5;font-family:‘Courier New‘, sans-serif;font-size:12px;border:1px solid rgb(204,204,204);">           <span class="hljs-function"><span class="hljs-keyword" style="color:rgb(0,0,255);">private</span> <span class="hljs-keyword" style="color:rgb(0,0,255);">void</span> <span class="hljs-title" style="color:rgb(163,21,21);">EnsureLoaded</span>(<span class="hljs-params"></span>)
  2. </span>{
  3. <span class="hljs-keyword" style="color:rgb(0,0,255);">if</span> (_section == <span class="hljs-keyword" style="color:rgb(0,0,255);">null</span>)
  4. {
  5. <span class="hljs-meta" style="color:rgb(43,145,175);">#<span class="hljs-meta-keyword">if</span> NET45</span>
  6. _section = ConfigurationManager.GetSection(<span class="hljs-string" style="color:rgb(163,21,21);">"rafy"</span>) <span class="hljs-keyword" style="color:rgb(0,0,255);">as</span> RafyConfigurationSection;
  7. <span class="hljs-keyword" style="color:rgb(0,0,255);">if</span> (_section == <span class="hljs-keyword" style="color:rgb(0,0,255);">null</span>) _section = <span class="hljs-keyword" style="color:rgb(0,0,255);">new</span> RafyConfigurationSection();
  8. <span class="hljs-meta" style="color:rgb(43,145,175);">#<span class="hljs-meta-keyword">endif</span></span>
  9. <span class="hljs-meta" style="color:rgb(43,145,175);">#<span class="hljs-meta-keyword">if</span> NS2</span>
  10. <span class="hljs-keyword" style="color:rgb(0,0,255);">var</span> rafyRawSection = ConfigurationHelper.Configuration.GetSection(<span class="hljs-string" style="color:rgb(163,21,21);">"rafy"</span>);
  11. <span class="hljs-keyword" style="color:rgb(0,0,255);">if</span> (rafyRawSection == <span class="hljs-keyword" style="color:rgb(0,0,255);">null</span>)
  12. {
  13. <span class="hljs-keyword" style="color:rgb(0,0,255);">throw</span> <span class="hljs-keyword" style="color:rgb(0,0,255);">new</span> InvalidProgramException(<span class="hljs-string" style="color:rgb(163,21,21);">"配置文件中没有 rafy 配置节,请检查配置文件。"</span>);
  14. }
  15. _section = <span class="hljs-keyword" style="color:rgb(0,0,255);">new</span> RafyConfigurationSection();
  16. rafyRawSection.Bind(_section);
  17. <span class="hljs-meta" style="color:rgb(43,145,175);">#<span class="hljs-meta-keyword">endif</span></span>
  18. }
  19. }</code>
  • 配置项目为编译时生成对应的 Nuget 包。

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

通过上述几步,就使得 Rafy 框架支持了 Net Standard 版本了。

原文地址:https://www.cnblogs.com/h1nson/p/9413071.html

时间: 2024-08-29 21:43:19

如何发布同时支持.net core和.net framework的nuget包的相关文章

运用.net core配合VS 2015制作nuget包

以往做nuget包我们一般要么用命令行,要么用nuget的图形化界面去做,但是一些操作比较麻烦.比如引入命名空间,引入第三方nuget包.今天,我们来讲解下一种全新的构建方式. 环境: win10 VS2015 企业版 .net 全家桶(.net framework,dnx,.NET core) Why: 运用.net core+官方这种特殊类库项目,一切都可以用代码编辑完成,不需要做一些对我们来讲非常额外的工作,于是乎,构建变得无比简单.本人强烈建议以后做nuget类库的时候都用这样的方法.

.NET Core 学习笔记2&mdash;&mdash;管理nuget包

.NET Core 基于Nuget包.它是一个.nupkg后缀的zip文件. 工具 dotnet 工具 vs2017 的程序包管理控台 这两个工具都可以用命令行来下载安装,更新,上传包(上传要先在网站注册账号):也可以用vs里面的UI工具管理. 项目文件控制包 项目文件(.csproj后缀)是一个xml文件,描述了引用包的关系,很多时候需要手工编辑这个来达到高级目标. <ItemGroup> <!-- ... --> <PackageReference Include=&qu

NET Core驱动已出,支持EF Core

NET Core驱动已出,支持EF Core 千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址: https://www.nuget.org/packages/MySql.Data.Core/ 本篇还是简单介绍一下:.NET Core 使用Dapper 操作MySQL 数据库, .NET Core MySQL官方驱动. 新建项目 新建一个.NET Core控制台

一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 &amp; 发布

微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 .Net Framework 程序集打包 Nuget 有以下方法: 1. 使用命令  nuget pack  详见博客园的一篇博文 <用命令行工具创建 Nuget 程序包>: 2. 使用 NuGet Package Explorer: 3. vs 插件 NuBuild Project System.

[开源].NET高性能框架Chloe.ORM-完美支持.NET Core

扯淡 这是一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询.聚合查询.插入数据.批量删除和更新等操作. .NET Core 发布至今挺久的了,由于我本人不是很赶潮流,因此,都没去学习它,只是从“道听途说”中了解到 .NET Core 把很多功能模块化,分离开来,同时也发展跨平台.最近貌似很火,我也该追随大家的步伐了,要不真的 OUT 了.学习离不开练习,练习

老牌开源Office操作组件NPOI现已支持.NET Core

昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了,这也就意味着你可以在.NET Core中使用NPOI了. 作者:依乐祝 原文地址 :https://www.cnblogs.com/yilezhu/p/10269281.html 写在前面 曾经的.NET Framework时代就很喜欢使用这个组件来对Excel的进行操作,可是随着.NET Core时代的到来以及NPOI不支持.NET Core所以就找到了园子里的大神

[转]Ubuntu Tweak 0.8.7 发布:支持 Ubuntu 14.04

原文网址:http://www.oschina.net/news/51054/ubuntu-tweak-0-8-7 这是我开发 Ubuntu Tweak 七年以来第一次没在 Ubuntu 正式发布之前同步更新,作为开发者兼维护者,这个工作还是得完成.于是,支持 Ubuntu 14.04 的 Ubuntu Tweak 正式来了. Ubuntu Tweak 除了正式增加 Ubuntu 14.04 的支持以外,还带来一些小改进 这些改进是: 增加对 Unity Launcher 点击图标最小化 App

创建可同时用于.net core与.net framework的库,并发布到nuget

我们在引用nuget上的类库时常常会看到如下类型的包 这说明它分别可用于使用.netFramework或使用.net Core的项目.这样的包可以兼顾到不同框架版本的项目,但只需在nuget发布一个包就行,非常的方便. 那么如何来创建一个这样的通用类库呢? 首先使用vs2017新建一个标准库 编辑csproj文件 编辑标签TagetFramework,添加如图标出的内容 重载项目,然后生成项目可以发现在debug目录生成了两个文件夹,说明你已经创建了一个可用于多个目标框架的类库,简称多目标库 仅

新版markdown功能发布!支持github flavored markdown!

让大家久等了!新版markdown功能一直拖到今天才发布,很是愧疚...但不管怎么样,总算发布了! 今年1月份发布第一版markdown功能之后,很多园友反馈说做得很烂,我们综合大家的反馈之后发现不仅很烂,而且非常烂.于是,烂定思烂,决定重新开发markdown功能. 这次我们果断采用了最强大的markdown引擎--pandoc.但果断起来容易,做起来难.摆在我们面前的一个最大的难题就是如何用C#调用Haskell? 再加上之前没有接触过Haskell,更是难上加难.经过一个多月的努力才解决了