[ASP.net Core] 部署 ASP.net Core 到 IIS 個人踩雷合集

Deploy ASP.net Core to IIS

最近好不容易把ASP.net Core網站 (2.1 version) 部署到客戶端

記錄一下自己踩雷的過程,未來回頭Copy Paste解決方案

網站要先經過發行Publish動作,像以往.Net Framework時期,直接複製檔案到正式機部署是行不通的

預設發佈的設定是「Framework 依存性」、「可攜式」,產出來的檔案數量、大小比較少

不過正式機得先安裝:ASP.NET Core Runtime & Hosting Bundle,載點列表:.NET Download Archives

讓 IIS 出現 ASPNETCoreModule模組可以處理 ASP.net Core 網站,個人猜測未來Windows Server 2016之後的作業系統IIS如果有內建的話,或許此步驟可省略(?)

SDK要不要安裝我不清楚,我開發的是ASP.net Core 2.1 網站

但是我亂 try 一通,把.Net Core最新版 2.2 SDK、Runtime和.Net Core 2.1 SDK、Runtime全都安裝,所以沒得細追XD

微軟官網有ASP.net Core部署到IIS的教學: 在使用 IIS 的 Windows 上裝載 ASP.NET Core    

※網路上也有熱心網友,寫得很詳細的部署文章:IIS - 運行 ASP.NET Core 網站

如果網站執行遇到這樣的錯誤↓

HTTP Error 502.5 - Process Failure

通常和執行環境的設定有關

微軟有篇文章:針對 IIS 上的 ASP.NET Core 進行疑難排解

照著文章做,可以從各個地方看到錯誤Log,例如:Web.config如何開啟執行錯誤Log,Windows的應用程式事件檢視器

我部署卡關是卡在「faield to start process with commandline 'dotnet .\xxx.dll',ErrorCode = '0x80070002' : 0」

「沒有與命令 "dotnet-.\xxx.dll" 相符的可執行檔」

後來解決方式是把Web.config裡的processPath改成絕對路徑才解決

變成下面↓

至於讀取不到 processPath="dotnet" 的環境變數,後來我查了網路,似乎安裝完Runtime & Hosting Bundle後,Server還要重新開機(讓電腦讀取得到dotnet環境變數)

由於客戶端的主機還有其他服務在跑,我才沒重開機,才造成上述發生的錯誤吧

.Net Core 3 也快推出,未來還有遇到什麼地雷,再補上~