遷移Net項目為Net Core\Standard項目
背景:
我們公司內部有自己ORM開發框架,最新因為需要將系統遷移到國產服務器上,所以首先需要將最基礎的ORM框架改造可以運行在國產服務器上。對於我們Net來說,優選Net Core。在遷移的過程中,將一些經驗和坑記錄下來,幫助自己記憶同時也給有同樣需求的Net朋友一些幫助。
原始項目 Beyonbit.Framework 預覽
看上圖的當前項目,為我們的ORM框架。本次遷移主要將Beyondbit.Framework項目從Net Framework 3.5 遷移為 Net Core\Standard 2.0。
新建一個Net Standard 類庫為Beyonbit.Framework
新建的步驟很簡單,就不截圖說明。
為什么創建一個項目,而不是將現在的項目升級
幾點考慮:
- 當前類庫是一個非常穩定的類庫
- 這個類庫是一個歷史類庫,有非常多的功能,並且我不知道所有的功能
- 在將這個類庫升級成功前,這個類庫需要繼續提供給Net Framework 項目使用
- 類庫升級成功后,很有可能比不穩定,在穩定的這段期間,依然需要穩定的類庫給Net Framework 使用
- 為什么不重新復制一份代碼,在這個復制的代碼上改造?當然首先我會建立一個分支。同時,基於以上原因,我希望的是同一份代碼可以編譯出Net Framework和Net Core\Standard類庫
可以看看微軟的建議《組織項目以支持 .NET Framework 和 .NET Core》
Net Standard和Net Core的關系
簡單來將 Net Standard就是以前微軟的共享類庫的升級版,dll可以運行在WPF、ASP.NET、WinFrom、Silverlight、UWP的類庫。
而Net Core生成的類庫,依然只能運行在NetCore運行時上。
這個了解共享類庫的概念會很好理解,不了解的話,可以看看其他同學寫的文章。
linezero同學的《.NET Core 2.0及.NET Standard 2.0》
或微軟的文章《.Net Core, .Net Framework, .Net standard library, Xamarin 之間關系》
移植現有代碼到Net Core上
項目創建好了,如何將現在的類文件遷移到新項目上呢。可能有以下方案:
- 把所有文件復制到新項目上
- 把所有文件用快捷方式的辦法添加到新項目上
在遷移這方面可以看看凌晨三點半同學的文章《遷移.net framework 工程到.net core》和《度量.net framework 遷移到.net core的工作量》
不過我的做法和凌晨三點半同學的不一樣。我是在參看log4net的開源代碼時,看到的思路,借鑒了這個更簡單的方法。
使用文本編輯器打開新建項目的.csproj文件
我的項目內容如下:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
在文件中添加一下代碼:
<ItemGroup>
<Compile Include="..\..\Beyondbit.Framework\**\*.cs" />
</ItemGroup>
這句代碼的意思是,將Beyondbit.Framework目錄下的所有文件和目錄都用快捷方式包含到項目中。
效果如下:
可以看到新項目的文件和老項目的文件是一模一樣的,並且圖標可以看出是快捷方式添加的。
Build 當前項目
項目已經遷移OK了,我們可以Build一下項目,然后將所有錯誤消滅。
我的項目編譯結果如下:
總共有60個錯誤。最后調整發現不止60個錯誤,當這60個錯誤處理后,再編譯,產生了新的錯誤,加起來有100個錯誤左右。
總結:
遷移第一步工作結束,后續第二部的工作是來消滅錯誤,第三部是遷移單元測試和集成測試項目,以及最終的多個平台運行的測試。