首页

源码搜藏网

首页 > 开发教程 > .net教程 >

.NET6新特性试用之Nuget包验证

创建时间:2022-03-16 21:59  

前言:

我们常常需要将.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版本的其他类库。那么运行时很可能收到如下异常:

.NET6新特性试用之Nuget包验证

现在让我们加上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包验证内容请搜索源码搜藏网以前的文章或继续浏览下面的相关文章希望大家以后多多支持源码搜藏网!

上一篇:.NET6新特性试用之DateOnly和TimeOnly类型
下一篇:编译dotnet和aspnetcore源代码详情

相关内容

热门推荐