今天在公司有位小伙伴問我說:「保哥,公司最近接到一個維護案,我拿到 Source Code 的時候都看不到 *.csproj 專案檔或 *.sln 方案檔耶,這樣怎麼用 Visual Studio 2022 開發?」我說:「你就是太年輕了,才不知道有 ASP.NET Web Site Project 的存在,你只碰過 ASP.NET Web Application Project 而已。」我在指導完他如何開啟與將 ASP.NET Web Site Project 加入版控後(很多雷),就順手把 CI Pipelines 設定起來,這篇章我就來說說如何對 ASP.NET Web Site Project 進行自動建置。

由於 ASP.NET Web Site Project 並沒有專案檔的存在,而且 ASP.NET Web Site Project 只能跑在 IIS 底下,所以基本上要對這種類型的網站進行自動化建置,就要透過 ASP.NET Compilation Tool (aspnet_compiler.exe
) 工具來執行,這是一套從 ASP.NET 2.0 就存在的古老工具,內建在 .NET Framework 之中。
首先,你要先找到 aspnet_compiler.exe
工具的所在目錄,因為該目錄預設並沒有加入 PATH
環境變數,所以執行時建議寫上完整路徑。從我的電腦可以找到 4 個不同的執行檔路徑,請自己選擇適合的版本來執行:
-
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe
.NET Framework 4.0+ 與 64-bits 版本
-
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe
.NET Framework 4.0+ 與 32-bits 版本
-
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_compiler.exe
.NET Framework 2.0 ~ 3.5 與 64-bits 版本
-
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe
.NET Framework 2.0 ~ 3.5 與 32-bits 版本
再來,我們就看看幾個不同的使用方法:
-
主機沒有 IIS 伺服器,只有原始碼所在的實體目錄
aspnet_compiler.exe -v / -p $(Build.SourcesDirectory)
其中 $(Build.SourcesDirectory)
為你的原始碼所在目錄。
-
主機沒有 IIS 伺服器,只有原始碼所在的實體目錄,編譯失敗時要顯示 Stack Trace 資訊
aspnet_compiler.exe -v / -p $(Build.SourcesDirectory) -errorstack
其中 $(Build.SourcesDirectory)
為你的原始碼所在目錄,而 -errorstack
則會跟你講發生錯誤的完整堆疊資訊(Stack Trace)(老實說沒什麼用)。
-
網站已經部署到 IIS 伺服器,可以直接指定預設站台的虛擬路徑 /WebApplication1
aspnet_compiler.exe -v /WebApplication1
如果只有用 -v /
參數,預設他會去找 LM/W3SVC/1/ROOT
(預設網站) 底下的虛擬目錄來建置。
-
主機沒有 IIS 伺服器,只有原始碼所在的實體目錄,你想發行預先編譯的網站到指定資料夾
aspnet_compiler.exe -v / -p $(Build.SourcesDirectory) -u $(Build.ArtifactStagingDirectory)
這種編譯方式不會輸出 *.cs
原始碼
其中 $(Build.SourcesDirectory)
為你的原始碼所在目錄,而 $(Build.ArtifactStagingDirectory)
則為網站輸出路徑。
-
主機沒有 IIS 伺服器,只有原始碼所在的實體目錄,你想發行預先編譯的網站到指定資料夾,輸出的 DLL 要固定檔名
aspnet_compiler.exe -v / -p $(Build.SourcesDirectory) -u $(Build.ArtifactStagingDirectory) -fixednames
這種編譯方式不會輸出 *.cs
原始碼
其中 $(Build.SourcesDirectory)
為你的原始碼所在目錄,而 $(Build.ArtifactStagingDirectory)
則為網站輸出路徑,加入 -fixednames
則代表替每一個 aspx, ascx, ... 頁面建立獨立的 *.dll
檔案,詳見 Fixed Assembly Names 說明。
相關連結