.NET?6新特性試用之Nuget包驗(yàn)證
前言:
我們常常需要將.NET類庫(kù)打包成Nuget包,以便多個(gè)項(xiàng)目公用。
一旦修改類庫(kù),?盡管代碼可以運(yùn)行?,并成功打包成新版本?,看起來一切正常?,?但是?你無法保證該更改是安全且兼容的。
而在.Net 6中,提供了包驗(yàn)證工具,幫助我們檢測(cè)這一點(diǎn)。
Demo
使用方式也非常簡(jiǎn)單,只需修改項(xiàng)目文件,加上??EnablePackageValidation??屬性:
<EnablePackageValidation>true</EnablePackageValidation>
包驗(yàn)證工具提供了三種驗(yàn)證器:
- ?Baseline version validator?:根據(jù)先前發(fā)布的穩(wěn)定版本的軟件包驗(yàn)證類庫(kù)項(xiàng)目。
- ?Compatible runtime validator?:驗(yàn)證特定于運(yùn)行時(shí)的實(shí)現(xiàn)程序集是否彼此兼容以及是否與編譯時(shí)程序集兼容。
- ?Compatible framework validator?: 驗(yàn)證針對(duì)一個(gè)框架版本編譯的代碼同樣可以在包中的所有其他框架版本上運(yùn)行。
以Baseline version validator為例。假設(shè)1.0.0版本有如下方法:
public class Class1 { ? ? public void Demo(string param1) ? ? {? ? ? ? ? Console.WriteLine("Demo 1.0.0: {param1}"); ? ? } }
當(dāng)我們接到需求,為??Demo??方法增加了參數(shù):
public class Class1 { ? ? public static void Demo(string param1, string param2) ? ? { ? ? ? ? Console.WriteLine("Demo 1.1.0: {param1} {param2}"); ? ? } }
代碼邏輯沒有問題,但是當(dāng)我們發(fā)布1.1.0版本后,而引用了這個(gè)包的項(xiàng)目也包含引用過1.0.0版本的其他類庫(kù)。那么運(yùn)行時(shí)很可能收到如下異常:
現(xiàn)在讓我們加上??Baseline version validator??。修改類庫(kù)項(xiàng)目文件內(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??
就是用于對(duì)比的基線版本。
再次使用??dotnet pack??打包,你將會(huì)收到類似如下錯(cuò)誤提示:
error CP0002: Member 'ClassLibrary1.Class1.Demo(string)' exists on [Baseline] lib/net6.0/ClassLibrary1.dll but not on lib/net6.0/ClassLibrary1.dll
按照消息提示的那樣,我們可以修改成如下代碼進(jìn)行修復(fù):
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é)論:
?包驗(yàn)證工具允許開發(fā)人員在包開發(fā)過程中驗(yàn)證他們的包是否一致且格式良好。它允許開發(fā)人員根據(jù)以前的版本、框架的版本和運(yùn)行時(shí)來驗(yàn)證包。??
到此這篇關(guān)于.NET 6新特性試用之Nuget包驗(yàn)證的文章就介紹到這了,更多相關(guān) Nuget包驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET中生成Excel遇到的問題及改進(jìn)方法
這是在項(xiàng)目中使用的生成Excel的一個(gè)方法(其實(shí)是我在網(wǎng)上收集),用了半年時(shí)間,并未出現(xiàn)異常情況。近日當(dāng)我再次使用該方法生成Excel的時(shí)候出現(xiàn)了問題2011-02-02.NET中利用js讓子窗體向父頁(yè)面?zhèn)髦档膶?shí)現(xiàn)方法
.NET中利用js讓子窗體向父頁(yè)面?zhèn)髦档膶?shí)現(xiàn)方法,需要的朋友可以參考一下2013-02-02精彩回顧!Visual Studio 2017正式版發(fā)布全紀(jì)錄
兩個(gè)小時(shí)的Visual Studio 2017正式版發(fā)布紀(jì)錄內(nèi)容還是很豐富的,這篇文章就為大家回顧了Visual Studio 2017正式版發(fā)布全過程,感興趣的小伙伴們可以參考一下2017-03-03ASP.NET網(wǎng)站偽靜態(tài)下使用中文URL的方法
中文URL是在URL中直接使用漢字,它的好處是可以使用鏈接地址看起來非常直觀易懂,偽靜態(tài)的規(guī)則,是在web.config文件中定義的2014-08-08ASP.NET 實(shí)現(xiàn)驗(yàn)證碼以及刷新驗(yàn)證碼的小例子
這篇文章介紹了ASP.NET 實(shí)現(xiàn)驗(yàn)證碼以及刷新驗(yàn)證碼的小例子,有需要的朋友可以參考一下2013-10-10利用MS AJAX注冊(cè)Javascript命名空間并創(chuàng)建類
利用MS AJAX注冊(cè)Javascript命名空間并創(chuàng)建類...2007-10-10asp.net 通過指定IP地址得到當(dāng)前的網(wǎng)絡(luò)上的主機(jī)的域名
通過指定的ip地址獲取當(dāng)前網(wǎng)絡(luò)的主機(jī)的域名,大家可以看看2009-02-02Hangfire在ASP.NET CORE中的簡(jiǎn)單實(shí)現(xiàn)方法
下面小編就為大家分享一篇Hangfire在ASP.NET CORE中的簡(jiǎn)單實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11