发布(Windows)

发布(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-13 21:23:30

发布(Windows)的相关文章

微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server

微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容器技术的支持的版本,也提供了 Nano Server 和数据中心增强的功能. Windows Server 容器是微软和 Docker 合作的,开发者可以通过隔离操作系统环境的方式来运行应用.Windows Server 容器是 Docker 开源计划的一部分,容器可以通过 PowerShell 或

使用py2exe发布windows平台Python

一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序.py2exe是发布在开源许可证下的. 二.安装py2exe 从http://prdownloads.sourceforge.net/py2exe下载并运

微软发布Windows Phone 8.1 Update 和中文版Cortana“小娜”

Windows Phone 8.1 尚在推送进程中,它的第一个 GDR 更新就发布了.今天微软正式发布 Windows Phone 8.1 Update 和中文版 Cortana ——“小娜”. Windows Phone 8.1 改变了以往 GDR (General Distribution Refresh)的命名方式,采用和 Windows 系统一样的 Update 命名.新系统增加 CDMA + GSM 双卡.qHD (960 * 540)分辨率.高通闪充 2.0.智能手机保护套(类似 H

使用InstallUtil发布windows服务

发布Windows Service的方法 1. 在默认窗口Service1中右键Add Install,自动生成两个类. 2. 修改serviceInstaller1的属性:  a)ServiceName =”FirstService”:   //设置服务名称  b)StartType = Automatic:      //启动的模式有三种:“自动”.“手动”.“禁用”.事实上,在“我的电脑”的“管理”->“服务”中,还有一种模式:“自动(延迟启动)”  c)Modifiers=public:

使用Jenkins自动发布Windows服务项目

不同于发布Web项目,自动发布Windows服务项目需要解决以下几个问题: 如何远程停止和开启服务?需要在发布前停止服务,在发布完成后开启服务. 如何上传编译文件到目标服务器? 问题1:如何远程停止和开启服务 在msbuild之前添加一个execute windows batch command,执行cmd命令,cmd命令如下: echo **********stop remote server windows service********** "C:\Program Files\IIS\Mi

微软发布Windows Terminal Preview v0.10

导读 近日微软推出了 Windows Terminal Preview v0.10,你可以从微软商店或者 GitHub 找到它. 其实就在 2 月,微软发布了“功能完善的” 的 v0.9,还还表示该版本是“在 v1 发布之前的最后一个版本”,未料不过一月,又迭代一版本,引入两个新功能:鼠标输入.复制 Pane. 据介绍,该终端现在支持鼠标输入的视窗子系统的应用程序,以及使用虚拟终端输入的视窗应用程序.微软表示:“这意味着,当你点击终端窗口中的项目时,tmux 和 Midnight Command

使用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&quo

微软发布Windows 10:连Windows 7都能免费升级了

今日凌晨,微软宣布Windows 10发布. Windows10 整体重置了 Window8 的设计,恢复了原有的开始菜单设置,系统新增了虚拟桌面功能,搜索框加分类项的形式替代原有的两栏式控制面板界面. Windows 7免费升级 Belfiore还介绍,在Windows 10发布一年内,任何运行Windows 7.Windows 8.1或Windows Phone 8.1的设备都能免费升级系统至最新版本.他相信,这样的战略能够增强Windows生态系统的发展,越来越多的软件将会涌进这一系统.人

发布windows 7桌面池之自动桌面池即时克隆

在Horizon View  Web 控制台中的目录下拉菜单找到桌面池,点击添加,打开添加桌面池向导,选择类型为自动桌面池 2.设置用户分配类型 3.在vCenter Server页面选择即时克隆 4.设置桌面池标识 5.设置桌面池设置 6.配置桌面池命名模式.置备时间安排.桌面池尺寸等 7.配置存储优化 8.vCenter 设置配置默认镜像.虚拟机位置.资源设置等 9.客户自定义 10.检查配置,并点击完成. 11.通过client,可以看到很多的任务,在进行中 12.创建完成之后,在clie