在ABP官網創建一個.Net Core項目編譯完成
1、 發布網站



2、 IIS新建站點
目錄指向發布的目錄

3、安裝WindowsHosting
IIS安裝服務器上安裝DotNetCore.X.X.X-WindowsHosting安裝成功后重啟IIS服務器。根據版本選擇下載
下載地址:https://www.microsoft.com/net/download/windows

如果沒有安裝SDK 需要安裝.Net Core SDK
4、 修改application pool應用程序池 選擇無托管代碼

5、 瀏覽程序
報錯如下:
An error occurred while starting the application.
看不到詳細信息需要修改web.config 查看詳細信息 將stdoutLogEnabled的修改為 true,並在應用程序根目錄添加 logs 文件夾
<aspNetCore processPath="dotnet" arguments=".\tzky.saas.Web.Host.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
再瀏覽網站,當然還是報錯,現在到logs目錄查看報錯詳細信息
錯誤信息:用戶 'IIS APPPOOL\saasapp' 登錄失敗

6、錯誤診斷與解決
錯誤分析很顯然是應用程序權限問題,只要到application pool應用池-> 高級 -> 標識 將原來ApplicationPoolIdentity改為對數據庫有訪問權限和網站文件有讀寫權限的Windows用戶(這里需要確定這個Windows用戶可以登錄數據庫,不行可以在數據庫安全設置添加。當然你也可以將數據庫連接字符竄改為數據庫用戶和密碼訪問,比如:sa),然后重啟應用池,重啟網站瀏覽


啟動運行成功

7、總結
.Net Core 和 傳統的.Net 程序IIS部署主要注意以下幾點:
- 安裝DotNetCore.X.X.X-WindowsHosting和.Net Core SDK
- 應用池配置為無托管代碼(網上解釋:ASP.NET Core不再是由IIS工作進程(w3wp.exe)托管,而是使用自托管Web服務器(Kestrel)運行,IIS則是作為反向代理的角色轉發請求到Kestrel不同端口的ASP.NET Core程序中,隨后就將接收到的請求推送至中間件管道中去,處理完你的請求和相關業務邏輯之后再將HTTP響應數據重新回寫到IIS中,最終轉達到不同的客戶端(瀏覽器,APP,客戶端等)。而配置文件和過程都會由些許調整,中間最重要的角色便是AspNetCoreModule,它是其中一個的IIS模塊,請求進入到IIS之后便立即由它轉發,並迅速重定向到ASP.NET Core項目中,所以這時候我們無需設置應用程序池來托管我們的代碼,它只負責轉發請求而已)
- 如果需要讀寫根目錄權限,要更改應用池 ApplicationPoolIdentity
- 網站報錯,通過修改web.config 啟用錯誤日志查看詳細錯誤信息
官網配置鏈接:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?tabs=aspnetcore2x#common-errors
