打包 NuGet 套件時出現錯誤:'licenseUrl' 元素過時

上傳新版的 NuGet 套件時,nuget.org 顯示錯誤訊息,大意是 'licenseUrl' 元素已經過時,必須改用新的 license 元素。

本文提及的 Visual Studio 版本:
  • Visual Studio 2017 v15.9.7
  • Visual Studio 2019 RC

狀況

上傳新版的 NuGet 套件時,nuget.org 顯示錯誤訊息,大意是 'licenseUrl' 元素已經過時,必須改用新的 license 元素。如下圖:



於是進入 Visual Studio,開啟專案的屬性視窗,嘗試把 License URL 欄位清空,看看會怎麼樣:


結果,在建立 nuget 套件時,會出現錯誤訊息:


原因就如第一張截圖所顯示的,專案屬性的 Require license acceptance 有勾選,就必須指定此套件的授權協議。那麼問題來了:既然 License URL 欄位過時,不能再使用,那麼我該透過甚麼屬性來指定此套件的授權協議呢?

解決方法

快速瀏覽了NuGet issue #7509 和官方文件 Packaging License within the nupkg,看起來,我得手動去修改專案的 .csproj 檔案才行。下圖是修改前後的差異比對(左半部是修改前,右半部是修改後的內容):


改好之後,便可建立 NuGet 套件,並順利上傳至 NuGet 網站:



結案!

後記

我安裝了 Visual Studio 2019 RC 版,然後開啟上述專案的屬性,這裡就能看到新的 license 屬性了,如下圖:


從上圖可以發現,授權聲明不只可以放在一個檔案,也可以用比較簡單的「表達式」(Expression)來指定,例如:「LGPL-2.1 OR MIT」、「LGPL-2.1 AND MIT」、「GPL-2.0+ WITH Bison-exception-2.2」等等。詳情可參考官方文件 Packaging License within the nupkg
打包 NuGet 套件時出現錯誤:'licenseUrl' 元素過時 打包 NuGet 套件時出現錯誤:'licenseUrl' 元素過時 Reviewed by Michael Tsai on 3/04/2019 Rating: 5
技術提供:Blogger.