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

简介: .NET 6新新东西--nuget包验证

有时候我们在开发中需要将类库打包成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}");
    }
}

总结

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

目录
相关文章
|
5月前
|
中间件 Go 开发者
Go net http包
Go net http包
55 0
|
12月前
|
编解码 JSON 网络协议
Golang 语言使用标准库 net/rpc/jsonrpc 包跨语言远程调用
Golang 语言使用标准库 net/rpc/jsonrpc 包跨语言远程调用
102 0
|
12月前
|
Go
Go 使用标准库 net/http 包构建服务器
Go 使用标准库 net/http 包构建服务器
42 0
|
4月前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
50 3
|
3月前
|
开发框架 JSON .NET
|
4月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
122 0
|
4月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。
|
5月前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
67 1
|
5月前
|
Go 开发者
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第24天】Go语言的`net/http`包在HTTP客户端编程中扮演重要角色,但使用时需注意几个常见问题:1) 检查HTTP状态码以确保请求成功;2) 记得关闭响应体以防止资源泄漏;3) 设置超时限制,避免长时间等待;4) 根据需求处理重定向。理解这些细节能提升HTTP客户端编程的效率和质量。
56 1
|
12月前
|
Windows
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
2160 0
下一篇
无影云桌面