.NET?6新特性試用之Nuget包驗證
前言:
我們常常需要將.NET類庫打包成Nuget包,以便多個項目公用。
一旦修改類庫,?盡管代碼可以運(yùn)行?,并成功打包成新版本?,看起來一切正常?,?但是?你無法保證該更改是安全且兼容的。
而在.Net 6中,提供了包驗證工具,幫助我們檢測這一點(diǎn)。
Demo
使用方式也非常簡單,只需修改項目文件,加上??EnablePackageValidation??屬性:
<EnablePackageValidation>true</EnablePackageValidation>
包驗證工具提供了三種驗證器:
- ?Baseline version validator?:根據(jù)先前發(fā)布的穩(wěn)定版本的軟件包驗證類庫項目。
- ?Compatible runtime validator?:驗證特定于運(yùn)行時的實現(xiàn)程序集是否彼此兼容以及是否與編譯時程序集兼容。
- ?Compatible framework validator?: 驗證針對一個框架版本編譯的代碼同樣可以在包中的所有其他框架版本上運(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版本后,而引用了這個包的項目也包含引用過1.0.0版本的其他類庫。那么運(yùn)行時很可能收到如下異常:

現(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
按照消息提示的那樣,我們可以修改成如下代碼進(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é)論:
?包驗證工具允許開發(fā)人員在包開發(fā)過程中驗證他們的包是否一致且格式良好。它允許開發(fā)人員根據(jù)以前的版本、框架的版本和運(yùn)行時來驗證包。??
到此這篇關(guān)于.NET 6新特性試用之Nuget包驗證的文章就介紹到這了,更多相關(guān) Nuget包驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
.NET MVC中ViewData,ViewBag和TempData的區(qū)別淺析
這篇文章主要介紹了.NET MVC中ViewData,ViewBag和TempData的區(qū)別,分析了ViewData,ViewBag和TempData在賦值、功能特性等方面的區(qū)別于用法,具有一定參考借鑒價值,需要的朋友可以參考下2015-01-01
.net 獲取瀏覽器Cookie(包括HttpOnly)實例分享
這篇文章介紹了.net 獲取瀏覽器Cookie(包括HttpOnly)實例,有需要的朋友可以參考一下2013-10-10
ASP.NET MVC阿里大于短信接口開發(fā)短信群發(fā)能
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC阿里大于短信接口來開發(fā)例會短信群發(fā)能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
在ASP.Net 2.0中使用,只需要2個文件:FreeTextBox.DLL和ftb.imagegallery.aspx2009-11-11
為自己的ASP網(wǎng)站系統(tǒng)構(gòu)建一套標(biāo)記語言
為自己的ASP網(wǎng)站系統(tǒng)構(gòu)建一套標(biāo)記語言...2006-09-09
靈活掌握asp.net中g(shù)ridview控件的多種使用方法(上)
這篇文章向大家推薦如何靈活掌握asp.net中g(shù)ridview控件的多種使用方法,感興趣的小伙伴們可以參考一下2015-11-11
自動類型安全的REST.NET標(biāo)準(zhǔn)庫refit
這篇文章介紹了自動類型安全的REST.NET標(biāo)準(zhǔn)庫refit,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
國產(chǎn)化之Arm64?CPU+銀河麒麟系統(tǒng)安裝.NetCore的步驟詳解
這篇文章主要介紹了國產(chǎn)化之Arm64?CPU+銀河麒麟系統(tǒng)安裝.NetCore,這里就以ARM架構(gòu)舉例,其它CPU平臺的安裝過程都一樣,要下載的包不同而已,感興趣的朋友跟隨小編一起看看吧2022-03-03

