[廚餘回收] 用 WebDeploy 發佈 ASP.NET Core 應用程式到 IIS 遇到「error MSB6006: "msdeploy.exe" 以返回碼 -1 結束」的錯誤訊息

關於如何發佈 ASP.NET Core 應用程式到 IIS 上,官網上的這兩篇文章說得很清楚。

照著官網的步驟弄,一切還算順利,但還是遇到了一個小亂流,在執行 WebDeploy 的命令時,出現了「error MSB6006: "msdeploy.exe" 以返回碼 -1 結束」的錯誤訊息。

我們拿 error MSB6006 msdeploy.exe 這組關鍵字去搜尋,是找不到解答的,而且很多問題的原因最終都會丟 MSB6006 這個錯誤代碼,但是用 Visual Studio 去執行 WebDeploy 是沒有問題的。

-verbosity:detailed

既然訊息不夠明確,那我們就讓它明確一點,我們在執行 dotnet msbuild ... 命令時,加個參數 -verbosity:detailed(可縮寫成 -v:d)就可以讓訊息多印一點。

dotnet msbuild "xxx.csproj" -verbosity:detailed ...

參數一加之後,真正的錯誤原因就現形了,原來是伺服器端的憑證不受信任的問題。

AllowUntrustedCertificate

在做 WebDeploy 的時候,跟伺服器之間的連線預設一定是走 SSL/TLS 通道的,一般來說我們在公司內部的開發環境,伺服器的憑證大都使用自簽發的,自簽發的憑證通常是沒有認證過的,不受到信任是正常的,那麼要解決這個問題只要加個 AllowUntrustedCertificate 參數就好了,加 AllowUntrustedCertificate 參數有兩個方式,一是加在 PublishProfile(pubxml)檔案裡面。

二是如果用 Command Line 執行 WebDeploy,則在指令當中加入 /p:AllowUntrustedCertificate=True,這樣問題就解決了,可以順利執行 WebDeploy。

dotnet msbuild "xxx.csproj" /p:AllowUntrustedCertificate=True ...

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學