发布(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里几个重要的特性和功能,未来在实际开发过程中能更好的选择合适的技术方案。
发布(Windows)的更多相关文章
- 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server
微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...
- 发布windows phone应用经历实谈
经过这一次艰辛的发布应用的过程,看来果然这不是个简单的过程,不过经历过了一次之后感觉其实也没这么难,下面我将介绍我通过学生账号发布windows phone 8的应用到商店的全过程,其实整个过程最为困 ...
- 宣布发布 Windows Azure ExpressRoute,宣告与 Level 3 建立全新的合作伙伴关系并推出关于其他 Azure 服务令人振奋的更新
在我们与世界各地的客户和合作伙伴交谈时,总会听到他们说,希望找到一个提供商帮助他们最大限度地发挥内部部署投资的作用并且能够利用云的灵活性.这是我们构建混合云策略和云操作系统愿景的基本原则.本着我 ...
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...
- 宣布发布 Windows Azure SDK 2.2,正式发布 Windows Azure Backup 和 Hyper-V 恢复管理器预览版
开发人员正逐渐转向云计算,因为它具有众多优势,包括成本.自动化和让开发人员专注于应用程序逻辑的能力.我们很高兴地宣布,继推出 Visual Studio 2013 之后,今天将发布 Windows A ...
- 火眼发布Windows攻击工具集
导读 渗透测试员的喜讯:安全公司火眼发布Windows攻击工具集--足足包含140个程序. Kali Linux 已成为攻击型安全专家的标配工具,但对需要原生Windows功能的渗透测试员来说,维护良 ...
- 使用Jenkins自动发布Windows服务项目
不同于发布Web项目,自动发布Windows服务项目需要解决以下几个问题: 如何远程停止和开启服务?需要在发布前停止服务,在发布完成后开启服务. 如何上传编译文件到目标服务器? 问题1:如何远程停止和 ...
- 微软已发布 Windows 10 Timeline 功能的官方 Chrome 插件
微软已发布 Windows 10 Timeline 功能的官方 Chrome 插件,这个插件名为 Web Activities,功能是跨 Windows 10 和 Microsoft Launcher ...
- 使用InstallUtil发布windows服务
发布Windows Service的方法 1. 在默认窗口Service1中右键Add Install,自动生成两个类. 2. 修改serviceInstaller1的属性: a)ServiceNa ...
随机推荐
- HOG detectMultiScale 参数分析
前段时间学习了HOG描述子及其与SVM结合在行人检测方面的应用. 当我们用训练好的模型去检测测试图像时,我们会用到detectMultiScale() 这个函数来对图像进行多尺度检测. 这是openc ...
- sublime 插件 和free 注册码
代码对齐: Alignment html代码补全: Emmet CoffeeScript语法: Better CoffeeScript css格式化: CSS Format less语法: L ...
- CentOS终端操作mysql
1.停用mysql服务:service mysqld stop 重启mysql服务:service mysql restart 2.mysql 1045ERROR:mysqld_safe --user ...
- Effective Java2读书笔记-类和接口(五)
第21条:用函数对象表示策略 这一条其实也没说啥,就是策略模式.碰到这种场景时,定义一个策略接口,然后不同策略子类实现它,主类包含这个接口的引用就可以了. 第22条:优先考虑静态成员类 嵌套类是指被定 ...
- ORA-16014报错解决
今天在本地数据库操作的时候报错: SQL> alter database open;alter database open*第 1 行出现错误:ORA-16014: 日志 3 的序列号 55 未 ...
- Oracle 安装时候的网络相关内核参数
http://www.cnblogs.com/gaojian/archive/2012/10/12/2721284.html http://blog.chinaunix.net/uid-2442641 ...
- PowerShell_零基础自学课程_3_如何利用Powershell ISE调试PS脚本
微软在推出PS的同时,没有忘记其一贯的作风,什么东东都弄一个IDE环境,这不微软没有忘记给PS也来一个IDE的环境, 通过这个IDE环境,可以建立psl文件,可以调试psl文件. 1.IDE界面 我们 ...
- Android,监控ContentProvider的数据改变
有时候应用中需要监听ContentProvider的改变并提供响应,这时候就要利用ContentObserver类了 不管是ContentProvider中实现的,insert,delete,upda ...
- Java数据结构: java.util.BitSet源码学习
接着上一篇Blog:一道面试题与Java位操作 和 BitSet 库的使用,分析下Java源码中BitSet类的源码. 位图(Bitmap),即位(Bit)的集合,是一种常用的数据结构,可用于记录大量 ...
- 程序猿都是project师吗?
全部的程序猿都是project师吗?当然不是.project师是必修课.程序猿则是选修.project师为自己的事业工作,而程序猿做他们喜欢做的事情.project是实实在在的,编程是抽象的. 为了吸 ...