WebApp模版并运行
WebApp模版并运行
之前两篇文章简析.NET Core 以及与 .NET Framework的关系和.NET Core的构成体系从总体上介绍.NET Core,接下来计划用一个系列对ASP.NET Core的运行原理进行剖析。
ASP.NET Core 是新一代的 ASP.NET,早期称为 ASP.NET vNext,并且在推出初期命名为ASP.NET 5,但随着 .NET Core 的成熟,以及 ASP.NET 5的命名会使得外界将它视为 ASP.NET 的升级版,但它其实是新一代从头开始打造的 ASP.NET 核心功能,因此微软宣布将它改为与 .NET Core 同步的名称,即 ASP.NET Core。
ASP.NET Core 可运行于 Windows 平台以及非 Windows 平台,如 Mac OSX 以及 Ubuntu Linux 操作系统,是 Microsoft 第一个具有跨平台能力的 Web 开发框架。
微软在一开始开发时就将 ASP.NET Core 开源,因此它也是开源项目的一员,由 .NET 基金会 (.NET Foundation) 所管理。
正式版的.NET Core已于今天发布(2016年6月27日),具体可看微软 .NET Core 1.0 正式发布下载
核心框架
ASP.NET Core 在 .NET Core 的基础上发展,目前规划的功能有:
ASP.NET Core MVC: ASP.NET Core MVC 提供了开发动态web站点的API,包括了WebPages 和 WebAPI ,最终可运行在IIS 或 自托管(self-hosted)的服务器中。
DependencyInjection: 包含了通用的依赖注入接口,用于在ASP.NET Core MVC中使用。
Entity Framework Core: 与之前版本的EntityFramework版本类似是一个轻量级的ORM框架,包括了Linq,POCO和Codefirst的支持。
ASP.NET Core Identity: 用于在ASP.NET Core web applications构建用户权限系统的框架,包括了membership、login等功能,同时也可以方便的扩展和自定义。
ASP.NET Core APP 创建与运行
一、安装the .NET Core SDK for Windows(Linux、MAC)
以Windows为例,(下载地址),
安装完成后可以用命令dotnet -v查看版本号。
C:\Users\stephen>dotnet -v
Telemetry is: Enabled
.NET Command Line Tools (1.0.0-preview1-002702)
Usage: dotnet [common-options] [command] [arguments]
二、命令行生成模版项目
开发一个webapp可以从零开始创建文件,也可以通过命令行生成一个空的项目模版,下面的代码用于从零开始创建模版。
mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new
依次执行命令后,便可在当前路径下,生成模版。

模版包括以下三个文件:
- project.json:
主掌项目的运行期的配置设置,包含项目的包参考 (Package References)、项目的基本设置、引导指令、包含或排除指定目录、以及建造时的相关事件指令等。
- Program.cs:
程序入口文件
- project.lock.json:
与project.json相比,是project.json文件中引用包的完整引用列表。
三、修改project.json
project.json是用于定义项目需要依赖的资源,每个WebApp 需要一个hosting 程序(IIS、IISExpress等),而此次使用Kestrel (什么是kestrel?),在project.json中加入对Kestrel的依赖代码清单如下。
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-rc2-3002702"
},
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final"
},
四、下载依赖包部署网站
在WebApp部署时(dotnet restore)根据project.json的依赖文件,依靠nuget下载依赖包,完成对整个程序的restore。(类似于Nodejs的 npm restore)
在C:\Users\stephen\.nuget\packages可以看到nuget已经下载到本地的包,在开始部署前nuget是不会加载依赖包,下图可看到目前nuget并没有下载任何包。

然后执行命令
dotnet restore
可以看到,nuget已经自动将需要依赖包下载到本地

五、添加Startup.cs文件
对于一个ASP.NET Core 程序而言,Startup Class 是必须的。ASP.NET Core在程序启动时会从assemblies中找到名字叫Startup的类,如果存在多个名为Startup的类,则会先找到项目根名称空间下的Startup类。
在Startup必须定义Configure方法,而configureServices方法则是可选的,方法会在程序第一次启动时被调用,类似传统的ASP.NET MVC的路由和应用程序状态均可在Startup中配置,也可以在此安装所需中间件等等。Startup的详细功能的对于startup.cs中的configure和configureServices方法会在后续文章中详解。
在刚才文件路径下添加Startup.cs文件,并复制如下代码:
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
namespace aspnetcoreapp
{
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Run(context =>
{
return context.Response.WriteAsync("Hello from ASP.NET Core!");
});
}
}
}
六、Web Hosting 配置
在Program.cs文件中复制如下代码,指定WebApp宿主程序为Kestrel:
using System;
using Microsoft.AspNetCore.Hosting;
namespace aspnetcoreapp
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
七、编译
dotnet build
代码完成后,需要调用Roslyn编译器将代码编译为assemblies,存储至bin文件夹中。按照上一节所述(简析 .NET Core 构成体系),
ASP.NET Core App 可以编译为IL的assemblies外,还可以通过native直接编译为机器码。

八、启动
输入启动命令,Kestrel托管WEB程序,并在5000端口监听,至此整个程序启动起来。
dotnet run


总结
本节介绍了ASP.NET Core 项目从创建、配置、编译、发布、运行的过程,ASP.NET Core与之前的ASP.NET相比具有更高的透明度和灵活性,可以快速的在各个操作系统中开发与运行。
本节使用Windows操作系统,但目前微软也在 linux 和 mac 下提供了类似的命令行工具(链接地址),方便在 linux 和 mac 下开发与部署,在后面文章中会详细讲解,本节不再累述。
以上内容有任何错误或不准确的地方请大家指正,不喜勿喷!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
参考链接
WebApp模版并运行的更多相关文章
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...
- 使用Jexus 5.8.2在Centos下部署运行Asp.net core
这里安装的Jexus不是独立版本,所以需要先安装Mono 系统版本:Cenos7,Mono版本:5.0.1 Stable (5.0.1.1) Mono官方doc:http://www.mono-p ...
- WebApp 设计要素
从去年开始就负责公司WebApp的产品跟设计工作,最近整体大改了两个版本,也算累积了一些实际的经验.在不断学习的过程中,发现对于WebApp可以直接用于项目上的资料比较零碎,在这里总结一下,供初做 W ...
- webapp调试工具weinre的使用
在设计师与前端开发人员的努力下,一个WebApp出炉了,可是测试人员说了一堆的问题:某某机型下页面表现不一致,某某系统下页面如何如何,某某 系统浏览器下页面怎么怎么滴.看着满满的测试汇总文档,我们曾经 ...
- uni-app (1) 安装与运行。
安装: 直接到官网安装. 到插件市场下载一个模版. 新建项目的时候有提示链接: 找一个模版用于测试,或者在创建的时候选一个内置模版. 运行:第一次运行的时候有几个地方需要配置,这里因为只是用到了微信小 ...
- 使用Spring Boot快速构建基于SQLite数据源的应用
为了提供一个单包易部署的服务器应用,考虑使用Spring Boot,因为其集成了Apache Tomcat,易于运行,免去绝大部分了服务器配置的步骤. 项目初始化 首先从mvn archetype:g ...
- idea下使用Maven找不到类
当我们配置好pom文件的时候,准备启动Tomcat,Tomcat缺报找不到类的错误.. 可是明明我们的pom文件是没有问题的,在web.xml中也是可以ctrl+鼠标左键把类找到-为啥就报这么一个错误 ...
- Java全栈程序员之07:IDEA中使用MAVEN构架生产级的Web项目
在上一篇我们介绍了如何在IDEA中使用MAVEN,以及如何创建依赖等.那么在这一篇中,我们就试图搭建一个生产级的解决方案,大家可以使用这个解决方案作为骨架代码来搭建自己的开发环境. 在这里,我们要完成 ...
- Maven(3)-利用intellij idea创建maven web项目
本文通过一个例子来介绍利用maven来构建一个web项目.开发工具:intellij idea. 一.新建maven项目 此处选择:Create from archetype.表示从已有的maven模 ...
随机推荐
- PSAM卡
PSAM卡 终端安全控制模块,符合<中国金融集成电路(IC卡)PSAM卡规范>, 包括普通PSAM卡和高速PSAM卡. PSAM符合以下标准及规范: 识别卡,带触点的集成电路卡标 ...
- 文件的哈希值不在指定的目录文件中。此文件可能已损坏或被篡(Windows10 /Windows8.1)
------------------------------------------Windows10------------------------------------------------ ...
- C# 方法的可选参数、命名参数
原文 http://www.cnblogs.com/lonelyxmas/admin/EditPosts.aspx?opt=1 C#方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可 ...
- perl5 第十一章 文件系统
第十一章 文件系统 by flamephoenix 一.文件输入/输出函数 1.基本I/O函数 1)open函数 2)用open重定向输入 3)文件重定向 4)指定读写权限 ...
- linux技术框架
编程语言 一般使用c或者c++ linux使用 鸟哥私房菜 工具使用 代码编辑source insight,代码编译gcc,代码调试gdb,代码编译组织makefile,命令执行shell,文本编辑n ...
- [置顶] 基于.NET的快速信息化系统开发框架 — RDIFramework.NET — 系统目录
基于.NET的快速信息化系统开发整合框架 —RDIFramework.NET—系统目录 框架简单介绍 .NET快速开发整合框架(RDIFramework.NET),基于.NET的快速信息化系统开发.整 ...
- Foundation Sorting: Shellsort
/* Shell Sorting. * Implemention history:. * 2013-09-15, Mars Fu, first version. */ /* [Shell Sortin ...
- CSS一些设置用法
今天就简单写点的知识点 1. CSS字体样式小结 1) text-indent :值 实现段落首行缩进功能 (在起初我们编写段落时为了实现首行缩进两个字符时用的是HTML的标签元素&nb ...
- Dapper 多数据库优化
Dapper是近2年异军突起的新ORM工具,它有ado.net般的高性能又有反射映射实体的灵活性,非常适合喜欢原生sql的程序员使用,而且它源码很小,十分轻便.我写本博客的目的不是为了介绍Dapper ...
- ASP.NET 定时通知
ASP.NET 定时通知 using System; using System.Collections.Generic; using System.Linq; using System.Web; us ...