使用Visual Studio Code開發Asp.Net Core WebApi學習筆記(十)-- 發布(Windows)

來源:互聯網
上載者:User

標籤:

本篇將在這個系列示範的例子上繼續記錄Asp.Net Core在Windows上發布的過程。

Asp.Net Core在Windows上可以採用兩種運行方式。一種是自託管運行,另一種是發布到IIS託管運行。

第一部分、自託管一、依賴.Net Core環境

修改 project.json 檔案內容,增加發布時需要包含檔案的配置內容

 1 { 2   "version": "1.0.0-*", 3   "testRunner": "xunit", // 設定測試載入器為xunit 4   "buildOptions": { 5     "debugType": "portable", 6     "emitEntryPoint": true 7   }, 8   "dependencies": { 9     "Microsoft.NETCore.App": {10       "type": "platform",11       "version": "1.0.0"12     },13     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",14     "Microsoft.AspNetCore.Mvc": "1.0.0",15     "Microsoft.Extensions.Logging": "1.0.0",16     "Microsoft.Extensions.Logging.Console": "1.0.0",17     "Microsoft.Extensions.Logging.Debug": "1.0.0",18     "Microsoft.Extensions.Logging.Filter": "1.0.0",19     "NLog.Extensions.Logging": "1.0.0-rtm-alpha2",20     "Autofac.Extensions.DependencyInjection": "4.0.0-rc3-309",21     "Microsoft.Extensions.Configuration": "1.0.0",22     "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",23     "Microsoft.Extensions.Configuration.Json": "1.0.0",24     "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",25     "xunit": "2.2.0-beta2-build3300",26     "dotnet-test-xunit": "2.2.0-preview2-build1029",27     "moq.netcore": "4.4.0-beta8",28     "Microsoft.AspNetCore.TestHost": "1.0.0",29     "Newtonsoft.Json": "9.0.1"30   },31   "frameworks": {32     "netcoreapp1.0": {33       // 設定相容架構34       "imports": [35         "dotnet54",36         "portable-net45+win8"37       ]38     }39   },40   "publishOptions": {41     // 設定發布時需要包含的檔案42     "includeFiles": ["appsettings.json", "nlog.config"]43   }44 }

開啟cmd視窗,進入到項目根目錄,輸入命令 dotnet publish ,項目將會進行編譯發布

 

輸入 dotnet xxx.dll 命令啟動程式

訪問路徑 http://localhost:5000/api/users ,頁面正常顯示。

二、內建運行時發布

在跨平台發布時,.Net Core可以通過配置的方式指定目標平台,在發布時將對應的運行時一併打包發布。這樣目標平台不需要安裝.Net Core環境就可以部署。

再次修改 project.json 檔案,增加目標平台

 1 { 2   "version": "1.0.0-*", 3   "testRunner": "xunit", // 設定測試載入器為xunit 4   "buildOptions": { 5     "debugType": "portable", 6     "emitEntryPoint": true 7   }, 8   "dependencies": { 9     "Microsoft.NETCore.App": {10       //"type": "platform",   // 這個需要注釋掉11       "version": "1.0.0"12     },13     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",14     "Microsoft.AspNetCore.Mvc": "1.0.0",15     "Microsoft.Extensions.Logging": "1.0.0",16     "Microsoft.Extensions.Logging.Console": "1.0.0",17     "Microsoft.Extensions.Logging.Debug": "1.0.0",18     "Microsoft.Extensions.Logging.Filter": "1.0.0",19     "NLog.Extensions.Logging": "1.0.0-rtm-alpha2",20     "Autofac.Extensions.DependencyInjection": "4.0.0-rc3-309",21     "Microsoft.Extensions.Configuration": "1.0.0",22     "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",23     "Microsoft.Extensions.Configuration.Json": "1.0.0",24     "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",25     "xunit": "2.2.0-beta2-build3300",26     "dotnet-test-xunit": "2.2.0-preview2-build1029",27     "moq.netcore": "4.4.0-beta8",28     "Microsoft.AspNetCore.TestHost": "1.0.0",29     "Newtonsoft.Json": "9.0.1"30   },31   "frameworks": {32     "netcoreapp1.0": {33       // 設定相容架構34       "imports": [35         "dotnet54",36         "portable-net45+win8"37       ]38     }39   },40   "publishOptions": {41     // 設定發布時需要包含的檔案42     "includeFiles": [43       "appsettings.json",44       "nlog.config"45     ]46   },47   // 目標平台48   "runtimes": {49     "win7-x64": {},50     "win10-x64": {},51     "ubuntu.14.04-x64": {}52   }53 }

cmd視窗運行 dotnet restore 命令,還原目標平台相關的包。這個過程耗時較長。

還原完成後,執行 dotnet publish 命令進行發布

進入對應發布目錄,執行 WebApiFrame.exe 檔案即可啟動項目。

如果不顯式指定目標平台,.Net Core預設選擇當前系統平台。如果想指定目標平台,則需要執行命令 dotnet publish -r {目標平台} 。下面展示的是發布到ubuntu環境下。

 

第二部分、IIS託管

首先要安裝一個工具.NET Core Windows Server Hosting。該工具支援將IIS作為一個反向 Proxy,將請求導向Kestrel伺服器。

引入相關nuget包

"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0"

修改 Program.cs 內容

 1 using Microsoft.AspNetCore.Hosting; 2  3 namespace WebApiFrame 4 { 5     public class Program 6     { 7         public static void Main(string[] args) 8         { 9             var host = new WebHostBuilder()10                 .UseKestrel()11                 .UseIISIntegration()12                 .UseStartup<Startup>()13                 .Build();14 15             host.Run();16         }17     }18 }

在項目根目錄添加web.config,並配置到發布包含檔案清單中

 1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3  4   <!-- 5     Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380 6   --> 7  8   <system.webServer> 9     <handlers>10       <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>11     </handlers>12     <aspNetCore processPath="dotnet" arguments=".\WebApiFrame.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />13   </system.webServer>14 </configuration>

執行 dotnet publish 發布後開始配置IIS

修改應用程式集區,.Net CLR版本修改為:無Managed 程式碼

啟動網站,訪問地址 http://localhost:8080/api/users ,頁面將顯示內容。

在上面的例子裡,IIS通過Asp.Net Core Module,提供了反向 Proxy的機制。

通過訪問IIS地址,將請求導向Asp.Net Core內建的Kestrel伺服器,經過處理後再反向回傳到IIS。整個過程IIS只作為一個橋樑,不做任何邏輯處理。

 

最後的話

這個系列到這裡就告一段落了。之所以選擇使用Visual Studio Code工具開發Asp.Net Core Web Api,主要是想通過一點點慢慢搭建這個架構的過程中,逐步學習瞭解Asp.Net Core裡幾個重要的特性和功能,未來在實際開發過程中能更好的選擇合適的技術方案。

使用Visual Studio Code開發Asp.Net Core WebApi學習筆記(十)-- 發布(Windows)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.