.NET 6新特性试用之Nuget包验证

 更新时间:2022年03月15日 10:53:29   作者:My IO  
这篇文章主要介绍了.NET 6新特性试用之Nuget包验证,将.NET类库打包成Nuget包,以便多个项目公用,下面我们就来学习西还内容,详细资料需要的朋友可以参考下面文章

前言:

我们常常需要将.NET类库打包成Nuget包,以便多个项目公用。

一旦修改类库,​尽管代码可以运行​,并成功打包成新版本​,看起来一切正常​,​但是​你无法保证该更改是安全且兼容的。

而在.Net 6中,提供了包验证工具,帮助我们检测这一点。

Demo

使用方式也非常简单,只需修改项目文件,加上​​EnablePackageValidation​​属性:

<EnablePackageValidation>true</EnablePackageValidation>

包验证工具提供了三种验证器:

  • ​Baseline version validator​:根据先前发布的稳定版本的软件包验证类库项目。
  • ​Compatible runtime validator​:验证特定于运行时的实现程序集是否彼此兼容以及是否与编译时程序集兼容。
  • ​Compatible framework validator​: 验证针对一个框架版本编译的代码同样可以在包中的所有其他框架版本上运行。

以Baseline version validator为例。假设1.0.0版本有如下方法:

public class Class1
{
    public void Demo(string param1)
    { 
        Console.WriteLine("Demo 1.0.0: {param1}");
    }
}

当我们接到需求,为​​Demo​​方法增加了参数:

public class Class1
{
    public static void Demo(string param1, string param2)
    {
        Console.WriteLine("Demo 1.1.0: {param1} {param2}");
    }
}

代码逻辑没有问题,但是当我们发布1.1.0版本后,而引用了这个包的项目也包含引用过1.0.0版本的其他类库。那么运行时很可能收到如下异常:

现在让我们加上​​Baseline version validator​​。修改类库项目文件内容如下:

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

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
   <PackageVersion>1.1.0</PackageVersion>
   <EnablePackageValidation>true</EnablePackageValidation>
   <PackageValidationBaselineVersion>1.0.0</PackageValidationBaselineVersion>
  </PropertyGroup>

</Project>

​​PackageValidationBaselineVersion​​就是用于对比的基线版本。

再次使用​​dotnet pack​​打包,你将会收到类似如下错误提示:

error CP0002: Member 'ClassLibrary1.Class1.Demo(string)' exists on [Baseline] lib/net6.0/ClassLibrary1.dll but not on lib/net6.0/ClassLibrary1.dll

按照消息提示的那样,我们可以修改成如下代码进行修复:

public class Class1
{
    public static void Demo(string param1)
    {
        Demo(param1,"");
    }
    public static void Demo(string param1, string param2)
    {
        Console.WriteLine("Demo 1.1.0: {param1} {param2}");
    }
}

结论:

​包验证工具允许开发人员在包开发过程中验证他们的包是否一致且格式良好。它允许开发人员根据以前的版本、框架的版本和运行时来验证包。​​

到此这篇关于.NET 6新特性试用之Nuget包验证的文章就介绍到这了,更多相关 Nuget包验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Ext.net中的MessageBox的简单应用实现代码

    Ext.net中的MessageBox的简单应用实现代码

    今天在项目中要用到简单的MessageBox的使用。在Ext.net中没有Winform那么简单,直接写MessageBox.show()的方法。于是就去examples.ext.net的例子网站找,想找到个实际能用的
    2012-03-03
  • ASP.NET Core管理应用程序状态

    ASP.NET Core管理应用程序状态

    这篇文章介绍了ASP.NET Core管理应用程序状态的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • IdentityServer4 QuckStart 授权与自定义Claims的问题

    IdentityServer4 QuckStart 授权与自定义Claims的问题

    这篇文章主要介绍了IdentityServer4 QuckStart 授权与自定义Claims的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • asp.net web页面自定义分页控件使用详解

    asp.net web页面自定义分页控件使用详解

    这篇文章主要为大家详细介绍了asp.net web页面自定义分页控件使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • C#使用Unity实现IOC

    C#使用Unity实现IOC

    本文详细讲解了C#使用Unity实现IOC的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • ASP.NET Core跨站登录重定向的实现新姿势

    ASP.NET Core跨站登录重定向的实现新姿势

    这篇文章主要给大家介绍了关于ASP.NET Core实现跨站登录重定向的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • ASP.NET Core使用GraphQL第二章之中间件

    ASP.NET Core使用GraphQL第二章之中间件

    这篇文章主要给大家介绍了关于ASP.NET Core使用GraphQL第二章之中间件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • datatable行转列示例分享

    datatable行转列示例分享

    这篇文章主要介绍了datatable行转列示例,指定需要转换的表和转换表表头对应旧表字段就可以转换了
    2014-01-01
  • 巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码

    巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码

    巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码,需要的朋友可以参考下。
    2011-12-12
  • ASP.NET Core 奇技淫巧之接口代理转发的实现

    ASP.NET Core 奇技淫巧之接口代理转发的实现

    这篇文章主要介绍了ASP.NET Core 奇技淫巧之接口代理转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论