將 .NET Framework 項目轉(zhuǎn)換為 .NET Standard 項目
將?.NET?Framework?項目轉(zhuǎn)換為 .NET?Standard?項目
獨立觀察員 2020 年 8 月 20 日
如今 .NET?Core?是未來發(fā)展的主流(至少在 .NET 5 發(fā)布之前),而我們?nèi)绻脑煲粋€項目為 .NET?Core?項目,則它引用的項目應當先改造為 .NET Standard 項目。
下表給出了每種平臺支持指定的 .NET Standard 版本的最低版本(參考):

?
簡單說明一下:.NET Standard 2.0 支持 .NET Core 2.0 和 .NET Framework?4.6.1(最好使用 4.7.2 或更高),所以使用這些版本的話就不用進行多平臺配置了。.NET Standard 2.1 開始就和 .NET Framework 不兼容了,這種情況還是要多平臺配置。(關于多平臺配置,后面會提到)
?
言歸正傳,我們?nèi)绾螌?Framework 類庫項目轉(zhuǎn)換為 Standard 類庫項目呢?答案就是使用 dotnet try-convert 工具。
安裝前先要確保你已經(jīng)安裝了 .NET Core?SDK?(get it here),然后在任務欄搜索 “cmd”,以管理員身份運行:

?
使用如下命令安裝或卸載:
:: 安裝:dotnet tool install -g try-convert:: 卸載:dotnet tool uninstall -g try-convert
我已經(jīng)安裝過了:

?
接下來在項目路徑打開 cmd,使用如下命令進行轉(zhuǎn)換:
try-convert?
轉(zhuǎn)換前:

?
轉(zhuǎn)換后:

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

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

?
打開后發(fā)現(xiàn),項目類型還是 .NET Framework 4.5.2(net452):

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

?
那么我們接下來就來進行 “多平臺配置” 吧。
首先,在項目文件中將 TargetFramework 改為 TargetFrameworks (加個 “s”),然后里面的內(nèi)容加上 “netstandard2.0” ,并與之前的內(nèi)容以分號隔開,修改后如下:

?
然后我們關閉 VS 并重新打開(重新加載解決方案),再次查看項目屬性,可以看到目標框架里沒有指定特定的內(nèi)容了,生成一下也沒什么錯誤,說明配置成功了。

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

?
如果解決方案里有多個項目需要轉(zhuǎn)換,也可以定位在解決方案目錄,然后執(zhí)行轉(zhuǎn)換命令(try-convert),已轉(zhuǎn)換的項目會自動跳過,剩余項目將自動批量轉(zhuǎn)換:

?
通過命令輸出,我們還得知了新式的項目類型叫做 “.NET SDK-style project” ,哈哈,漲姿勢了。
?
如果 .NET Standard 依賴項中出現(xiàn)了黃色三角形:

?
可以看看該項是否需要,不需要的可以移除。另外,在打開的類文件標簽下方可以手動選擇當前在什么框架下查看:

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

?
然后搜索并安裝:

?
好了,大致就是這些了。
?
參考:
《從 .NET Framework 移植到 .NET Core 的概述》
?
