写点什么

.NET 6 新东西 --nuget 包验证

作者:喵叔
  • 2021 年 12 月 06 日
  • 本文字数:1254 字

    阅读完需:约 4 分钟

有时候我们在开发中需要将类库打包成 nuget 包供其他项目使用。这种看似很很好,那么如果类库修改了,即使代码可以运行并成功打包出了新版本,这虽然看起来一切正常,但我们没办法确保这次的修改是安全的也是兼容旧版本的。微软也意识到了这一点,因此就在.Net6 中提供了包验证工具,帮我们检测包的安全性和兼容性。下面我们就来看一下怎么使用:其实使用方式非常简单,只需在项目文件中加入```EnablePackageValidation``属性即可:


<EnablePackageValidation>true</EnablePackageValidation>
复制代码


.NET6 中的包验证工具提供了三种验证器:


  1. Baseline version validator:根据以前发布的稳定版本的软件包验证类库项目;

  2. Compatible framework validator: 一个框架版本编译的代码可以在包中其他框架版本上运行;

  3. Compatible runtime validator:特定于运行时的实现程序集是否兼容以及是否与编译时程序集兼容。


这里我们以 Baseline version validator 为例来讲解一下包验证该怎么用。我们的初版代码如下:


public class D{    public void Demo(int one ,int two)    {       int sum=one+two;        Console.WriteLine($"{one}+{two}={sum}");    }}
复制代码


在第二版本中,我们给方法增加乘运算:


public class D{    public void Demo(int one ,int two,int three)    {       int sum=one+two;      int mul=sum * three;        Console.WriteLine($"{one}+{two}={sum}");        Console.WriteLine($"{sum }*{three}={mul}");    }}
复制代码


代码很简单,当我们发布新版本后,就会出现引用了这个包的项目也包含引用过 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.D.Demo(int,int)' exists on [Baseline] lib/net6.0/ClassLibrary1.dll but not on lib/net6.0/ClassLibrary1.dll
复制代码


按照提示的信息进行如下修改即可:


public class D{    public void Demo(int one ,int two)    {       int sum=one+two;        Console.WriteLine($"{one}+{two}={sum}");    }    public void Demo(int one ,int two,int three)    {       int sum=one+two;      int mul=sum * three;        Console.WriteLine($"{one}+{two}={sum}");        Console.WriteLine($"{sum }*{three}={mul}");    }}
复制代码

总结

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

用户头像

喵叔

关注

还未添加个人签名 2020.01.14 加入

还未添加个人简介

评论

发布
暂无评论
.NET 6新东西--nuget包验证