使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)

本篇将在这个系列演示的例子上继续记录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作为一个反向代理,将请求导向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版本修改为:无托管代码

启动网站,访问地址 http://localhost:8080/api/users ,页面将显示内容。

在上面的例子里,IIS通过Asp.Net Core Module,提供了反向代理的机制。

通过访问IIS地址,将请求导向Asp.Net Core内置的Kestrel服务器,经过处理后再反向回传到IIS。整个过程IIS只作为一个桥梁,不做任何逻辑处理。

最后的话

这个系列到这里就告一段落了。之所以选择使用Visual Studio Code工具开发Asp.Net Core Web Api,主要是想通过一点点慢慢搭建这个框架的过程中,逐步学习了解Asp.Net Core里几个重要的特性和功能,未来在实际开发过程中能更好的选择合适的技术方案。

时间: 2024-10-08 11:27:32

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)的相关文章

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步

本文记录了在Windows环境下安装Visual Studio Code开发工具..Net Core 1.0 SDK和开发一个简单的Web-Demo网站的全过程. 一.安装Visual Studio Code 安装文件下载地址:VS Code,当前最新版本是1.3. 推荐安装最新版,因为附带Debug插件,支持在vs code上进行断点调试. 二.安装.Net Core 1.0 SDK 安装文件下载地址:.Net Core SDK 三.创建一个.Net Core应用程序 1. 打开cmd窗口,创

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部分:默认Logger支持 一.project.json添加日志包引用,并在cmd窗口使用 dotnet restore 命令还原包文件. 1 { 2 "version": "1.0.0-*", 3 "buildOptions": { 4 "debugType": "portable", 5 "emit

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(九)-- 单元测试

本篇将结合这个系列的例子的基础上演示在Asp.Net Core里如何使用XUnit结合Moq进行单元测试,同时对整个项目进行集成测试. 第一部分.XUnit 修改 Project.json 文件内容,增加XUnit相关的nuget包引用,并修改部分配置. 1 { 2 "version": "1.0.0-*", 3 "testRunner": "xunit", // 设置测试工具为xunit 4 5 "buildOpt

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Lo

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部分:默认Logger支持 一.project.json添加日志包引用,并在cmd窗口使用 dotnet restore 命令还原包文件. 1 {

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(六)-- 依赖注入

本篇将介绍Asp.Net Core中一个非常重要的特性:依赖注入,并展示其简单用法. 第一部分.概念介绍 Dependency Injection:又称依赖注入,简称DI.在以前的开发方式中,层与层之间.类与类之间都是通过new一个对方的实例进行相互调用,这样在开发过程中有一个好处,可以清晰的知道在使用哪个具体的实现.随着软件体积越来越庞大,逻辑越来越复杂,当需要更换实现方式,或者依赖第三方系统的某些接口时,这种相互之间持有具体实现的方式不再合适.为了应对这种情况,就要采用契约式编程:相互之间依

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(四)-- Middleware

本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Middleware功能支持. 在演示Middleware功能之前,先要了解一下Asp.Net管道模型发生了什么样的变化. 第一部分:管道模型 1. Asp.Net管道 在之前的Asp.Net里,主要的管道模型流程如下图所示: 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理.H

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo

在上一篇里,我已经建立了一个简单的Web-Demo应用程序.这一篇将记录将此Demo程序改造成一个Web Api应用程序. 一.添加ASP.NET Core MVC包 1. 在project.json文件添加Microsoft.AspNetCore.Mvc包 1 { 2 "version": "1.0.0-*", 3 "buildOptions": { 4 "debugType": "portable",

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(五)-- Filter

在上一篇里,介绍了中间件的相关内容和使用方法.本篇将介绍Asp.Net Core MVC框架的过滤器的相关内容和使用方法,并简单说明一下与中间件的区别. 第一部分.MVC框架内置过滤器 下图展示了Asp.Net Core MVC框架默认实现的过滤器的执行顺序: Authorization Filters:身份验证过滤器,处在整个过滤器通道的最顶层.对应的类型为: AuthorizeAttribute.cs Resource Filters:资源过滤器.因为所有的请求和响应都将经过这个过滤器,所以

【免费视频】使用VS Code开发ASP.NET Core WebAPI应用程序

1.使用VS Code开发ASP.NET Core WebAPI应用程序 1.使用Visual Studio Code开发Asp.Net Core基础入门实战 毕竟从.net过度过来的我们已经习惯了使用Microsoft的Visual Studio进行开发.那么有没有一款媲美Visual Studio的开发工具可以让我们能够在Linux系统上进行高效的.NET Core开发呢?答案是肯定的,因为微软已经开发了一个名为Visual Studio Code的跨平台和开源的文本编辑器.Visual S