logo头像

Edward.K Thinking

用Azure DevOps建立.Net Core的Package

我們知道使用VSTS中的Packages Manager可以建立企業或是私有的Nuget Server,在一般.Net Framework下,可以用下面幾個步驟建立Nuget的Package,其中使用到的是MSBuild做編譯,再用Nuget指令打包成Package



不過,今天若是也這樣對.Net Core專案進行封裝,雖然會成功,但是,當在.Net Core專案下載來用時候,就會出現你使用了.Net Framework,不能使用在.Net Core專案中,請使用XXXXX字樣,主要原因是在編譯時候,單純使用MSbuild的Task,會被使用.Net Framework進行編譯封裝所造成的問題,網路上有人說可以採用/t:package方式克服,不過,既然使用了.Net Core,就改用.Net Core方式做CI & CD吧

.Net Core專案檔設定


首先啟用的專案類型是.Net Core Libray



之前在.Net Framework時期專案,因為封裝成Nuget Package,必須透過.nuspec檔案把元件資訊填入,這樣別人才可以知道這個元件用途以及相關資訊,在.Net Core專案底下,已經可以省略這個檔案了,因為,要把這些需要填入資訊已經納入專案檔中了,在專案按右鍵找到屬性設定



針對整個專案設定部分,會多出一個Package頁簽,會發現填入的資訊跟.nuspec檔案內容是大同小異,只是這邊已經被限定好欄位了,上面有兩個需要打勾的,基本上是不需要去勾選


VSTS Build設定


在Build設定中,基本的完整流程如下:


Nuget Restore

在Nuget Task,要注意的就是它的Task Version,記得一定要選到最新版本,若是有Nuget.config檔案,也記得要放上去


donet Build

donet Task這裡如果只是單純Build .Net Core專案倒是不需要注意Task版本,但是,如果要封裝Package,記得選到最新版本,目前版本最新是2 Preview,因為在最新版本才會有Pack的指令,這裡的Path to project專案路徑,不能用選的,必須要用手敲入,記得不能打錯路徑,不然會失敗


donet pack

重頭戲是在這邊,搞定這個搞超久,再提一次,記得選到最新版本,不然會找不到Pack指令



此外,這邊有一個小坑,就是在Path to csproj or nuspec file(s) to pack提到可以使用.nuspec檔案作為Package的資訊檔案,但是,當我指定.nuspec檔案時候,就會出現不支援標籤,不知道這是preview造成還是其他問題,唯一可以確定是.nuspec檔案格式是沒問題的,所以,就指定.csproj,前面有提到,在.Net Core已經可以把封裝資訊放入專案檔,用處就是在這裡要被使用的。此外,我喜歡用Buil Number來作為Package版本號,也在Automatic package versioning中選用使用環境變數作為版號,而環境變數就是使用Build.BuildNumber,另一個要提醒的是這邊先不要把Do Not Build打勾,話說前面不是已經有Build過嗎?因該不需要再Build,這裡的Build主要是要做封裝用,所以還是必須要Build一次。

到這裡基本上就大功告成,後面兩個Task,主要是把封裝檔案上傳到發布區域,等待後面的發行

VSTS Release


到這裡只需要用一個Task就可以進行發佈到團隊的Packages中



只要選擇Nuget Publish,把相關資訊田入就可以,唯一要注意是要選擇4.0版本的Nuget指令



以上就能完成在VSTS針對.Net Core的CI / CD 了,有一些眉眉角角必須多踏過,不然還真的跑不出來,所以,不管是.Net Framework或是.Net Core都可以自動化封裝成Nuget Package

上一篇