實際體驗 .NET Standard 2.0 的魅力
在我們的 .net core 大遷移工程中,有些項目完成了遷移,有些還未遷移,這就帶來了一個煩惱——我們自己開發的公用類庫如何在 .net core 與 .net framework 項目中共享?如果不能共享,就得痛苦地針對同一個功能分別寫 .net core 版與 .net framework 版。遷移開始的一段時間,我們就幹了這樣的傻事。
最近我們又遇到了這個問題,但今非昔比,如今已經有了為此而生的羽翼豐滿的 .net standard 2.0 ,再加上 Artech 這篇醍醐灌頂的博文 .NET Core跨平臺的奧秘[下篇]:全新的布局 解釋清楚了 .net standard 的原理,於是可以借此機會實際體驗一下 .net standard 2.0 的魅力。
需要在 .net core 與 .net framework 中共享的類庫,只需創建一個 .net standard 類庫項目 ,然後發布為 nuget 包。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> </Project>
在 asp.net core 項目中直接安裝這個 nuget 包即可。
在基於 .net framework 的傳統 asp.net 項目中呢?。。。也是直接安裝這個 nuget 包即可,這麽簡單?是的,就這麽簡單!
但有一個不同之處,傳統 asp.net 項目安裝 nuget 包時會自動安裝一個依賴包 NETStandard.Library ,這個包中裝的是以下42個程序集:
.net framework 應用能夠引用基於 .net standard 的類庫靠的就是上面的這些程序集,其中最重要的角色是 netstandard.dll ,它是一個墊片程序集,由它負責將對 .net standard api 的調用轉發到 .net framework 中對應的真正幹活的程序集,實現了 .net framework 與 .net core 的類庫共享。
另外,有一個地方需要註意,在一個傳統 asp.net 解決方案中,如果只是在該解決方案的類庫項目中安裝了 .net standard 的 nuget 包,編譯 web 項目時並不會將上面的42個程序集復制到 web 項目的 bin 文件夾中,需要在 web 項目中再安裝一下 NETStandard.Library nuget 包。
帥!這下還未完成遷移的傳統 asp.net 項目可以先直接調用 .net core 中的公用類庫了。
實際體驗 .NET Standard 2.0 的魅力