昨天介紹了用 VSCode 建立 .NET Standard 2.0 類別程式庫,目標平台之所以選擇 .NET Standard 2.0 而非 .NET Core 或 .NET 6,主要是希望程式庫同時支援 .NET 4.6.1+ 與 .NET Core/.NET 5+ 專案,達成一魚兩吃的目標。

VSCode 編譯的 .NET Standard 2.0 .dll 要給 .NET 4.6.1+ 或 .NET Core、.NET 5+ 專案引用,簡便做法是打包成 .nupkg NuGet 程式包,放在共用資料夾、上傳到私有 NuGet 伺服器,甚至上傳到 NuGet Gallery 分享到全世界。

.NET CLI 內建打包 .nupkg 功能,只需在 .csproj 加幾行設定,執行 dotnet build 便會一併產生 xxxx.1.0.0.nupkg。詳細做法可參考 MS Docs Quickstart: Create and publish a package (dotnet CLI),裡面包含上傳 NuGet Gallery 的教學。

打包好程式庫,接著我們新增 ASP.NET MVC 專案做測試。(注意:目標平台需 .NET 4.6.1 以上才相容 .NET Standard 2.0,另外 .NET 4.5.2、4.6、4.6.1 將於今年 4/26 EOS,建議直接用 .NET 4.8)

引用前需新增 NuGet Package 來源,這裡以本機資料夾示範,建立一個 X:\LocalNuGet,將 ChConvUtil.1.0.0.nupkg 複製過去,並在 NuGet Package Manager / Package Sources 設定 UI 新增來源:
(註:也可用 dotnet nuget add source ... 指令新增)

新增 NuGet Package 時,選取 LocalNuGet 作為來源,清單中將會出現 ChConvUtil 1.0.0,比照一般 NuGet 套件安裝,Visual Studio 會自動下載相依套件:

加入參照後,將 JiebaResource、Dictionary 複製到 App_Data,並寫幾行程式傳入字庫路徑初始化,實測繁簡轉換成功!

看完 MVC 順便考古,若專案是 Web Site Project 打算再戰十年,如何來個貫通古今,讓清朝網站用二十一世紀的程式庫呢?

方法如下:

  1. 修改 web.config,加入以下內容:
     <system.web>
       <compilation debug="true" targetFramework="4.8" >
     	<assemblies>
     	  <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
     			PublicKeyToken=cc7b13ffcd2ddd51"/>
     	</assemblies>
       </compilation>
       <httpRuntime targetFramework="4.8" />
     </system.web>  
    
  2. 複製相關 dll 到 bin 目錄
  3. 複製 JiebaResource、Dictionary 到 App_Data
  4. 寫支 ChConvTest.aspx

測試成功!

Tutorial of how to create .nupkg for .NET Standard 2.0 class library projects and reference them in .NET 4.x or ASP.NET web site projects.


Comments

Be the first to post a comment

Post a comment