上篇我們提到了用psake來建制一個asp .net mvc的專案,並且修正了psake執行時候呈現的內容,在這篇,我們將進一步延伸來看一下,buid結束產生的內容是什麼和 加入另外兩種常見的.Net專案:
sample 程式在 github devops-psake sample/chapter7
同步發表於我的部落格:http://blog.alantsai.net/2016/12/devopsSeries-buildOutputProblem-1.html (部落格的格式會漂亮一些,ithome不支援html好不方便)
執行完build之後,我們會看到,在.build\temp下面有一堆檔案。
如果只熟悉用Visual Studio來建制的話,會覺得奇怪,怎麼有這麼多奇奇怪怪的檔案跑出來,並且網站那些css,javascript怎麼都不見了?
在往下看,會看到有一個.\build\temp_PublishedWebsites\WebApplication1,這個看起來就和我們所瞭解的網站專案比較有關係。
目前來說,我們可以得出一個結論,也就是建製出來的東西雖然結果是在我們指定的資料夾裡面,但是所有東西都在同一個層級。
假設我們在加入兩個常見的專案類型,Library和Console。
這個時候我們在build一次,在看看我們的結果,這個時候會發現,所有東西都堆在了一起。
如果結果都堆在一起,我們要怎麼區分什麼是什麼?因為最後我們要發佈或者把建制結果打包,如果區分不了如何能夠做這個事情?
在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的基本概念,因此我們想像另外一個思路。
另外一個思路是,既然Asp.Net Mvc會把它包好,是否可以用同樣概念去對Library還有Console程式的結果包在特定的資料夾下面?
要瞭解這個,就需要瞭解到為什麼只有Asp .Net Mvc的專案才會產生帶有 _PbulishedWebsite的資料夾,而這個答案就在MSBuild建制Asp .Net Mvc的方式不同有關。也就是下篇介紹的內容。
在這篇瞭解到其實建製出來的結果都是混在一起的,沒有辦法區分那個專案的結果在那邊。而這個問題將會影響到我們之後不管執行測試也好,還是要打包結果,都會造成不便利。
這個問題的一種解決方式是透過MSBUild的一個參數 - 但是這個只能夠用在.net 4.5以上的專案。
所以在下篇,我們會瞭解,到底asp .net mvc專案是如何做到產生在不同資料夾,並且我們如何使用這個概念