天天看點

将 .NET Framework 項目轉換為 .NET Standard 項目

将 .NET Framework 項目轉換為 .NET Standard 項目,以及多平台配置。

​将 .NET Framework 項目轉換​為 .NET Standard 項目

獨立觀察員 2020 年 8 月 20 日

如今 .NET Core​ 是未來發展的主流(至少在 .NET 5 釋出之前),而我們如果要改造一個項目為 .NET Core 項目,則它引用的項目應當先改造為 .NET Standard 項目。

下表給出了每種平台支援指定的 .NET Standard 版本的最低版本(​​參考​​):

将 .NET Framework 項目轉換為 .NET Standard 項目

簡單說明一下:.NET Standard 2.0 支援 .NET Core 2.0 和 .NET Framework 4.6.1(最好使用 4.7.2 或更高),是以使用這些版本的話就不用進行多平台配置了。.NET Standard 2.1 開始就和 .NET Framework 不相容了,這種情況還是要多平台配置。(關于多平台配置,後面會提到)

言歸正傳,我們如何将 Framework 類庫項目轉換​為 Standard 類庫項目呢?答案就是使用 ​​dotnet try-convert​​ 工具。

安裝前先要確定你已經安裝了 .NET Core SDK​ (get it ​​here​​),然後在工作列搜尋 “cmd”,以管理者身份運作:

将 .NET Framework 項目轉換為 .NET Standard 項目

使用如下指令安裝或解除安裝:

:: 安裝:
dotnet tool install -g try-convert
:: 解除安裝:
dotnet tool uninstall -g try-convert      

我已經安裝過了:

将 .NET Framework 項目轉換為 .NET Standard 項目

接下來在項目路徑打開 cmd,使用如下指令進行轉換:

try-convert      

轉換前:

将 .NET Framework 項目轉換為 .NET Standard 項目

轉換後:

将 .NET Framework 項目轉換為 .NET Standard 項目

可以看到已備份了舊的項目檔案,并修改出了新的項目檔案。這時我們點選 VS 的彈框重載項目即可(沒有打開 VS 則無此操作):

将 .NET Framework 項目轉換為 .NET Standard 項目

由于使用了新的項目檔案,我們在項目上右鍵,就能看到 “編輯項目檔案” 的選項:

将 .NET Framework 項目轉換為 .NET Standard 項目

打開後發現,項目類型還是 .NET Framework 4.5.2(net452):

将 .NET Framework 項目轉換為 .NET Standard 項目

在項目上右鍵–屬性,可以看到目标架構也還是以前的:

将 .NET Framework 項目轉換為 .NET Standard 項目

那麼我們接下來就來進行 “多平台配置” 吧。

首先,在項目檔案中将 TargetFramework 改為 TargetFrameworks (加個 “s”),然後裡面的内容加上 “netstandard2.0” ,并與之前的内容以分号隔開,修改後如下:

将 .NET Framework 項目轉換為 .NET Standard 項目

然後我們關閉 VS 并重新打開(重新加載解決方案),再次檢視項目屬性,可以看到目标架構裡沒有指定特定的内容了,生成一下也沒什麼錯誤,說明配置成功了。

将 .NET Framework 項目轉換為 .NET Standard 項目

另外,新式項目的依賴項組織形式也發生了變化:

将 .NET Framework 項目轉換為 .NET Standard 項目

如果解決方案裡有多個項目需要轉換,也可以定位在解決方案目錄,然後執行轉換指令(try-convert),已轉換的項目會自動跳過,剩餘項目将自動批量轉換:

将 .NET Framework 項目轉換為 .NET Standard 項目

通過指令輸出,我們還得知了新式的項目類型叫做 “.NET SDK-style project” ,哈哈,漲姿勢了。

如果 .NET Standard 依賴項中出現了黃色三角形:

将 .NET Framework 項目轉換為 .NET Standard 項目

​​

可以看看該項是否需要,不需要的可以移除。另外,在打開的類檔案标簽下方可以手動選擇目前在什麼架構下檢視:

将 .NET Framework 項目轉換為 .NET Standard 項目

如果有引用在 .NET Standard 架構下沒有,可在 “包” 上右鍵–“管理 NuGet 程式包”:

将 .NET Framework 項目轉換為 .NET Standard 項目

然後搜尋并安裝:

将 .NET Framework 項目轉換為 .NET Standard 項目

好了,大緻就是這些了。

參考:

繼續閱讀