iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 1
0
DevOps

從.Net工程師的角度來看DevOps - 到底能夠幫助什麼 之 再戰江湖系列 第 1

[iThome第8屆鐵人賽 07]建制結果問題 - 說明 和 處理方式 1

  • 分享至 

  • xImage
  •  

上篇我們提到了用psake來建制一個asp .net mvc的專案,並且修正了psake執行時候呈現的內容,在這篇,我們將進一步延伸來看一下,buid結束產生的內容是什麼和 加入另外兩種常見的.Net專案:

  1. Console Project
  2. Library Project

sample 程式在 github devops-psake sample/chapter7

同步發表於我的部落格:http://blog.alantsai.net/2016/12/devopsSeries-buildOutputProblem-1.html (部落格的格式會漂亮一些,ithome不支援html好不方便)

Build結果有什麼

執行完build之後,我們會看到,在.build\temp下面有一堆檔案。

一堆怪怪的檔案

如果只熟悉用Visual Studio來建制的話,會覺得奇怪,怎麼有這麼多奇奇怪怪的檔案跑出來,並且網站那些css,javascript怎麼都不見了?

在往下看,會看到有一個.\build\temp_PublishedWebsites\WebApplication1,這個看起來就和我們所瞭解的網站專案比較有關係。

_publishedWebsites\WebApplication1

目前來說,我們可以得出一個結論,也就是建製出來的東西雖然結果是在我們指定的資料夾裡面,但是所有東西都在同一個層級。

加入Library和Console專案

假設我們在加入兩個常見的專案類型,Library和Console。

多了兩個project

這個時候我們在build一次,在看看我們的結果,這個時候會發現,所有東西都堆在了一起。

如果結果都堆在一起,我們要怎麼區分什麼是什麼?因為最後我們要發佈或者把建制結果打包,如果區分不了如何能夠做這個事情?

解決方法 1 - .Net 4.5 以上的專案 - GenerateProjectSpecificOutputFolder

在MSbuild有個參數叫做GenerateProjectSpecificOutputFolder,這個參數可以讓建制的時候,結果還是依照solution專案來放。

所以我們可以再:default.ps1,調整建制MSBuild的參數:

task Compile -depends Clean, Init -description "編譯程式碼" `
    -requiredVariables solutionFile, buildConfiguration, buildTarget, buildTempDirectory `
{ 
 Write-Host "開始建制檔案:$solutionFile"
 
 $buildParam = "Configuration=$buildConfiguration" +
     ";Platform=$buildTarget" + 
     ";OutDir=$buildTempDirectory"
  
 $buildParam = $buildParam + ";GenerateProjectSpecificOutputFolder=true"
 
 msbuild $solutionFile "/p:$buildParam"
}

這個時候在看看發佈出來的結果,可以很清楚看到資料夾有做了區分。

建制結果有區分專案

解決方法1的缺點
雖然說解決方法1很簡單就能夠實現,但是他有個小缺陷 - .Net 4.5 以上的專案才能夠支援 - 雖然比較少寫4.5以下的專案,但是至少有這個缺陷。

加上這個系列也想介紹一些MSBuild的基本概念,因此我們想像另外一個思路。

解決方案 2 - 使用Asp.Net Mvc的概念產生出 _PublishedXXX

另外一個思路是,既然Asp.Net Mvc會把它包好,是否可以用同樣概念去對Library還有Console程式的結果包在特定的資料夾下面?

要瞭解這個,就需要瞭解到為什麼只有Asp .Net Mvc的專案才會產生帶有 _PbulishedWebsite的資料夾,而這個答案就在MSBuild建制Asp .Net Mvc的方式不同有關。也就是下篇介紹的內容。

結語

在這篇瞭解到其實建製出來的結果都是混在一起的,沒有辦法區分那個專案的結果在那邊。而這個問題將會影響到我們之後不管執行測試也好,還是要打包結果,都會造成不便利。

這個問題的一種解決方式是透過MSBUild的一個參數 - 但是這個只能夠用在.net 4.5以上的專案。

所以在下篇,我們會瞭解,到底asp .net mvc專案是如何做到產生在不同資料夾,並且我們如何使用這個概念


下一篇
[iThome第8屆鐵人賽 08]建制結果問題 - 方法2 透過MSBuild的Target
系列文
從.Net工程師的角度來看DevOps - 到底能夠幫助什麼 之 再戰江湖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Duran Hsieh
iT邦研究生 5 級 ‧ 2016-12-16 23:13:51

加油!!

Alan Tsai iT邦新手 2 級 ‧ 2016-12-17 16:39:17 檢舉

真快手,謝啦

superpucy iT邦新手 3 級 ‧ 2016-12-17 21:56:04 檢舉

耶~ welcome back
加油!!!
/images/emoticon/emoticon08.gif

我要留言

立即登入留言