首頁 > 軟體

.NET 6新特性試用之Nuget包驗證

2022-03-14 13:01:07

前言:

我們常常需要將.NET類庫打包成Nuget包,以便多個專案公用。

一旦修改類庫,​儘管程式碼可以執行​,併成功打包成新版本​,看起來一切正常​,​但是​你無法保證該更改是安全且相容的。

而在.Net 6中,提供了包驗證工具,幫助我們檢測這一點。

Demo

使用方式也非常簡單,只需修改專案檔案,加上​​EnablePackageValidation​​屬性:

<EnablePackageValidation>true</EnablePackageValidation>

包驗證工具提供了三種驗證器:

  • ​Baseline version validator​:根據先前釋出的穩定版本的軟體包驗證類庫專案。
  • ​Compatible runtime validator​:驗證特定於執行時的實現程式集是否彼此相容以及是否與編譯時程式集相容。
  • ​Compatible framework validator​: 驗證針對一個框架版本編譯的程式碼同樣可以在包中的所有其他框架版本上執行。

以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包驗證內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com