前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET 6新新东西--nuget包验证

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

作者头像
喵叔
发布2021-12-08 14:30:04
3330
发布2021-12-08 14:30:04
举报
文章被收录于专栏:喵叔's 专栏

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

代码语言:javascript
复制
<EnablePackageValidation>trueEnablePackageValidation>

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

  1. Baseline version validator:根据以前发布的稳定版本的软件包验证类库项目;
  2. Compatible framework validator: 一个框架版本编译的代码可以在包中其他框架版本上运行;
  3. Compatible runtime validator:特定于运行时的实现程序集是否兼容以及是否与编译时程序集兼容。

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

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

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

代码语言:javascript
复制
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时这个问题就解决了。项目文件修改内容如下:

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0TargetFramework>
   <PackageVersion>1.1.0PackageVersion>
   <EnablePackageValidation>trueEnablePackageValidation>
   <PackageValidationBaselineVersion>1.0.0PackageValidationBaselineVersion>
  PropertyGroup>
Project>

文件中的PackageValidationBaselineVersion是用于对比的基线版本。当我们使用dotnet pack打包时,将收到如下错误提示:

代码语言:javascript
复制
error CP0002: Member 'ClassLibrary1.D.Demo(int,int)' exists on [Baseline] lib/net6.0/ClassLibrary1.dll but not on lib/net6.0/ClassLibrary1.dll

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

代码语言:javascript
复制
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}");
    }
}
总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档