.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字樣)。git

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

總的來講,遷移一個.NET Core項目,大體有如下幾個步驟:json

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

下面我就以本身的一個開源項目HAL爲例,簡單介紹一下各個步驟的作法。服務器

遷移準備

HAL項目原本就是託管在Github上的一個開源項目,爲了可以平滑地實現項目遷移,並確保Jenkins CI可以正常工做,在進行項目遷移以前,我首先在Github上新建了一個分支(branch)。Github中建立分支的成本是很低的,在一切調試經過以後,將分支合併(merge)到主分支後,直接刪掉就好了。post

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中指定的版本:ui

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,那樣會形成編譯版本的混亂。

相關文章
相關標籤/搜索