.NET Core項目從xproj+project.json向csproj遷移簡介


3月7日,微軟發布了Visual Studio 2017 RTM,與之一起發布的還有.NET Core Runtime 1.1.0以及.NET Core SDK 1.0.0,盡管這些並不是最新版,但也已經從preview版本升級到了正式版。所以,在安裝Visual Studio 2017時如果啟用了.NET Core開發的相關功能,那么在安裝完成后,你可以在命令行直接執行dotnet.exe,此時你可以看到.NET Core版本是1.1.0,而如果是執行dotnet.exe --version命令,那么你看到的SDK版本將會是1.0.0(並不帶preview字樣)。

在此介紹如何查看.NET Core SDK版本,主要是源於一件非常有趣的事情,而這件事對於.NET Core項目從老的xproj+project.json遷移到csproj有一定的影響。如果你曾經使用Visual Studio 2015 + .NET Core Tools for Visual Studio + .NET Core SDK開發過項目,並希望在全新的Visual Studio 2017中繼續開發的話,了解一下這方面的內容還是很有必要的。

總的來說,遷移一個.NET Core項目,大致有以下幾個步驟:

  • 遷移准備
  • 使用Visual Studio 2017對項目進行單項升級
  • 在Jenkins CI服務器上安裝最新版的.NET Core SDK
  • 修改Jenkins CI系統編譯任務,成功完成編譯與發布

下面我就以自己的一個開源項目HAL為例,簡單介紹一下各個步驟的做法。

遷移准備

HAL項目本來就是托管在Github上的一個開源項目,為了能夠平滑地實現項目遷移,並確保Jenkins CI能夠正常工作,在進行項目遷移之前,我首先在Github上新建了一個分支(branch)。Github中創建分支的成本是很低的,在一切調試通過之后,將分支合並(merge)到主分支后,直接刪掉就行了。

Github中分支創建完成后,更新本地代碼庫,完成代碼同步。

在Visual Studio 2017中打開並升級.NET Core項目

在我之前有篇簡文中介紹過,在安裝了Visual Studio 2017 RC之后,如何還能繼續在Visual Studio 2015中打開並編譯xproj項目,因為當安裝完Visual Studio 2017后,dotnet.exe已經升級到1.0.0的版本,此時的dotnet.exe已經是使用MSBuild進行項目編譯,它並不認識xproj+project.json這樣的項目類型和文檔組織結構,因此,在Visual Studio 2015中即使能夠打開xproj項目文件,也無法正常編譯。當時的解決方案是,在項目的根目錄級別創建一個global.json文件,在文件中顯式指定.NET Core SDK的版本,使得在項目編譯時,強制使用老版本的.NET Core SDK,於是問題也就得到了解決。對於如何修改global.json以指定SDK的版本,這里就不多介紹了,請參考這篇文章

對於這個問題,我們可以做一個實驗,假定你的機器上裝有Visual Studio 2015 + .NET Core Tools for Visual Studio 2015 + preview版本的.NET Core SDK,同時裝有Visual Studio 2017。那么,當你直接在命令行執行dotnet.exe --version命令,你會看到,.NET Core SDK的版本為1.0.0:

image

如果你進入到一個在global.json中指定了SDK版本的項目的根目錄下,同樣執行dotnet.exe --version命令,你會發現,此時的SDK版本卻是global.json中指定的版本:

image

OK,如果你之前有修改global.json文件使得xproj項目能夠繼續在Visual Studio 2015中打開並編譯的話,現在就需要去掉global.json文件中對SDK版本的顯式聲明,否則,在Visual Studio 2017中進行項目遷移的時候,將無法正常完成。因為此時Visual Studio會使用舊版本的SDK,而這個版本的SDK沒有migrate功能。

總的來說,在Visual Studio 2017中遷移xproj還是比較平滑穩定的,一般不會遇到稀奇古怪的問題,只需要確認單向遷移就行了。在遷移完成后,會產生新的解決方案文件(sln)。

在Jenkins服務器上安裝新的.NET Core SDK

當Visual Studio 2017成功完成項目遷移之后,就可以把代碼提交到Github上的臨時分支了,這樣就能在Jenkins上進行構建測試。在此之前,需要安裝新版本的.NET Core SDK。安裝過程很簡單,到dotnet官方網站上根據Jenkins master或者slave的操作系統選擇相應的.NET Core SDK進行下載安裝即可。安裝完成后,可以使用dotnet --version命令,確認.NET Core SDK已經正確安裝。

修改Jenkins系統編譯任務

就HAL項目而言,我首先在Jenkins中克隆了編譯任務(build job),然后修改這個編譯任務,使得它能從Github中的臨時分支獲取代碼。整個過程也沒有出現什么難以解決的問題,原有的dotnet restore/build/pack等命令也能夠正常繼續使用,不過你會發現,編譯過程已經使用Microsoft Build Engine(MSBuild)了。

需要注意的是,原來基於xUnit的dotnet test,有一個-xml的隱藏參數,它能夠產生JUnit XML格式的單元測試結果報告,但在.NET Core SDK 1.0下,這個參數就不能用了,有個解決辦法是使用-l(--logger)參數,它能夠產生MSTest格式的單元測試報告,此時,在Jenkins中安裝一個MSTest的插件,就能夠繼續將測試報告顯示在主頁上。

image

最后,在Github中,將臨時分支合並到主線分支,並在Jenkins中手動修改主線分支對應的build job,最后把克隆的build job刪除即可。不建議繼續沿用克隆的build job,那樣會造成編譯版本的混亂。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM