上傳新版的 NuGet 套件時,nuget.org 顯示錯誤訊息,大意是 'licenseUrl' 元素已經過時,必須改用新的 license 元素。
本文提及的 Visual Studio 版本:
於是進入 Visual Studio,開啟專案的屬性視窗,嘗試把 License URL 欄位清空,看看會怎麼樣:
結果,在建立 nuget 套件時,會出現錯誤訊息:
原因就如第一張截圖所顯示的,專案屬性的 Require license acceptance 有勾選,就必須指定此套件的授權協議。那麼問題來了:既然 License URL 欄位過時,不能再使用,那麼我該透過甚麼屬性來指定此套件的授權協議呢?
改好之後,便可建立 NuGet 套件,並順利上傳至 NuGet 網站:
結案!
從上圖可以發現,授權聲明不只可以放在一個檔案,也可以用比較簡單的「表達式」(Expression)來指定,例如:「LGPL-2.1 OR MIT」、「LGPL-2.1 AND MIT」、「GPL-2.0+ WITH Bison-exception-2.2」等等。詳情可參考官方文件 Packaging License within the nupkg。
本文提及的 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。