实用技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > ASP.NET > 实用技巧 > Nuget包验证

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

作者:My IO

这篇文章主要介绍了.NET 6新特性试用之Nuget包验证,将.NET类库打包成Nuget包,以便多个项目公用,下面我们就来学习西还内容,详细资料需要的朋友可以参考下面文章

前言:

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

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

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

Demo

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

<EnablePackageValidation>true</EnablePackageValidation>

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

以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包验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文