部署教程
操作系統要求
- Windows 7 或更高版本
- Windows Server 2008 R2 或更高版本
依賴的組件

可以選擇.NET Core版本,選擇 Runtime & Hosting Bundle 開始下載。
這里一定注意左邊的版本標識了Sdk和運行時對應的Asp.NET Core IIS Module等各項版本信息

安裝完成后通過在IIS管理台上通過 模塊按鈕查看,如下圖


部署站點
部署方式和部署.NET站點一樣(安裝IIS和常規的IIS相關組件),只是需要將站點的應用程序池設置.NET CLR版本為 無托管代碼,如下圖:

接下來重啟服務器;
web.config詳解
vs發布后的站點文件夾下會帶有一個web.config文件。文件格式如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\Test1.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> </system.webServer> </location> </configuration>
上面的handlers節點下包含名稱aspNetCore,modules=“AspNetCoreModule
”的節點。意思即對應IIS下的AspNetCoreModule HttpModule。 這里不要對其進行改動,保持默認配置即可。
下面的aspNetCore節點內的processPath意思表示該站點需在IIS工作進程內托管,這種模式稱之為進程內托管模型。在進程內托管時,該模塊會使用 IIS 進程內服務器實現,即 IIS HTTP 服務器 (IISHttpServer)。在IIS托管下使用進程內托管模式比進程外托管模式性能更強。 stdoutLogEnabled屬性表示是否開啟日志(建議開啟),
stdoutLogFile屬性表示日志輸出目錄。
可以在配置文件中新增環境變量,如下:
<aspNetCore processPath="dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> <environmentVariable name="CONFIG_DIR" value="f:\application_config" /> </environmentVariables> </aspNetCore>
ASPNETCORE_ENVIRONMENT變量對應項目的appsettings.json文件讀取目錄(可讀取開發環境Development或生產環境Product)
CONFIG_DIR是我們自定義的一個環境變量,可在站點啟動時候讀取該變量做相應的邏輯。
注意此配置文件下的環境變量權重高於我們在操作系統下配置的環境變量
常見的部署問題(持續更新)
上面的部署步驟我都走完后,開啟站點遇到下面這個錯誤:

404!!!!!
我還只是默認的webapi啊,代碼都是微軟自動生成的啊!!!然后查看IIS日志, 如下圖


打開IIS日志存放目錄,C:\inetpub\logs\LogFiles\W3SVC4打開一看,沒問題啊,沒有錯誤日志啊(內心很糾結。。。)。
各種百度、Goolge就是沒找到解決辦法,一直以為是環境問題,服務器都重啟了不下3次
最后自己嘗試手動補齊了路由,一看可以了!!!
說到底還是對.NetCore了解不夠深入,發布后IIS托管站點后不會對路由默認補齊,所以在項目的launchSettings.json文件里改成一朵花都沒用。

默認路由未自動補齊導致404的解決辦法:
1、Nuget 安裝Microsoft.AspNetCore.Rewrite
2、在啟動項目Startup.Configure方法下的app.UseMvc();代碼前加入下面代碼:
var option = new RewriteOptions(); option.AddRedirect("^$", "swagger"); //swagger為補充的路由 app.UseRewriter(option); app.UseMvc();·
哎,本來還想部署在Linux上的,結果在IIS上部署都出西西,真的當時都懷疑自己了。
也是在開發經歷上遇到的各種問題吧,讓我能更深入的去理解問題本質並着手解決。
作者:長沙大鵬
鏈接:https://www.jianshu.com/p/a03c67feb0bd
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。