.NET 6新特性试用 | Nuget包验证
前言
我們常常需要將.NET類庫打包成Nuget包,以便多個項目公用。
一旦修改類庫,盡管代碼可以運行,并成功打包成新版本,看起來一切正常,但是你無法保證該更改是安全且兼容的。
而在.Net 6中,提供了包驗證工具,幫助我們檢測這一點。
Demo
使用方式也非常簡單,只需修改項目文件,加上EnablePackageValidation屬性:
<EnablePackageValidation>true</EnablePackageValidation>包驗證工具提供了三種驗證器:
Baseline version validator:根據(jù)先前發(fā)布的穩(wěn)定版本的軟件包驗證類庫項目。
Compatible runtime validator:驗證特定于運行時的實現(xiàn)程序集是否彼此兼容以及是否與編譯時程序集兼容。
Compatible framework validator: 驗證針對一個框架版本編譯的代碼同樣可以在包中的所有其他框架版本上運行。
以Baseline version validator為例。假設(shè)1.0.0版本有如下方法:
public?class?Class1 {public?void?Demo(string?param1){?Console.WriteLine("Demo?1.0.0:?{param1}");} }當我們接到需求,為Demo方法增加了參數(shù):
public?class?Class1 {public?static?void?Demo(string?param1,?string?param2){Console.WriteLine("Demo?1.1.0:?{param1}?{param2}");} }代碼邏輯沒有問題,但是當我們發(fā)布1.1.0版本后,而引用了這個包的項目也包含引用過1.0.0版本的其他類庫。那么運行時很可能收到如下異常:
現(xiàn)在讓我們加上Baseline version validator。修改類庫項目文件內(nèi)容如下:
<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}");} }結(jié)論
包驗證工具允許開發(fā)人員在包開發(fā)過程中驗證他們的包是否一致且格式良好。它允許開發(fā)人員根據(jù)以前的版本、框架的版本和運行時來驗證包。
如果你覺得這篇文章對你有所啟發(fā),請關(guān)注我的個人公眾號”My IO“
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的.NET 6新特性试用 | Nuget包验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#9.0 每个开发人员都必须知道的4个
- 下一篇: 基于事件驱动架构构建微服务第14部分:查