目录前言:Demo结论:前言: 我们常常需要将.net类库打包成Nuget包,以便多个项目公用。 一旦修改类库,尽管代码可以运行,并成功打包成新版本,看起来一切正常,但是
我们常常需要将.net类库打包成Nuget包,以便多个项目公用。
一旦修改类库,尽管代码可以运行,并成功打包成新版本,看起来一切正常,但是你无法保证该更改是安全且兼容的。
使用方式也非常简单,只需修改项目文件,加上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包验证内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: .NET 6新特性试用之Nuget包验证
本文链接: https://lsjlt.com/news/142381.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2023-05-21
2023-05-21
2023-05-21
2023-05-21
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0