Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

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

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

  1. Console Project
  2. Library Project


sample 程式在 github devops-psake sample/chapter7

Build結果有什麼

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

image
一堆怪怪的檔案

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

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

image
_publishedWebsites\WebApplication1

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

加入Library和Console專案

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

image
多了兩個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"
}
  

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

image
建制結果有區分專案

解決方法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專案是如何做到產生在不同資料夾,並且我們如何使用這個概念


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus