Fork me on GitHub
NET5实践:项目创建-结构概述-程序运行-发布部署

ASP.NET5实践01:项目创建-结构概述-程序运行-发布部署

 

1.项目创建

ASP.NET5项目模板有三种:

新建项目:

选择模板:

2.结构概述

References对应配置是project.json中:  

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },

ASP.NET5开发时支持多版本的clr共存,但运行时是使用其中一种。

dnxcore50是跨平台、模块化的coreclr。它有多种,如:dnx-coreclr-win-*,dnx-coreclr-linux-*等。

其它是完整版的,只支持windows的clr。

当然还有一种借助mono的clr。

wwwroot是web应用程序中的静态文件存储目录,也是web发布后部署时的根目录。

其中web.config是IIS部署时需要的配置文件。

由于ASP.NET5 Web程序是应用MVC6框架,管道是:Area/Controller/Action,不是实际文件路径。

所以要使用静态文件,需要引用依赖:"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"

并在Startup.cs中Configure()中开启:app.UseStaticFiles();

Dependencies中的Bower和npm是前端开发工具插件。

Bower的使用配置文件是:

npm插件安装配置文件是:

当然npm插件使用需要:

在gulpfile.js上右键,可以调出任务:

  

关于前端开发工具介绍,在以后的专题中再详细点介绍。

Controllers是控制器。

Migrations是EntityFramework手动添加迁移生成的。

Models是实体模型类。

Services是功能/业务实现类。

ViewModels是视图模型类。

Views是视图文件。

appsettings.json是配置文件。比如配置数据库连接字符串。

说一下Startup.cs文件,参见代码注释:

复制代码
namespace MyWeb
{
    public class Startup
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="env">web宿主环境中运行应用程序的信息</param>
        public Startup(IHostingEnvironment env)
        {
        //用于生成应用程序中使用的基于的键/值配置设置 对象创建
            var builder = new ConfigurationBuilder()
                //将 JSON 配置提供程序的路径添加到 configurationBuilder
                .AddJsonFile("appsettings.json")
                //获取或设置的环境的名称,自动设置此属性
                //如果optional为fales时,就不用此设置。
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

            //如果是开发环境
            if (env.IsDevelopment())
            {
                 //http://go.microsoft.com/fwlink/?LinkID=532709
                 builder.AddUserSecrets();
            }

            //添加读取IConfigurationProvider环境变量的配置值
            builder.AddEnvironmentVariables();
            //生成IConfiguration 键和值
            //从提供程序集在IConfigurationBuilder.Providers 注册
            Configuration = builder.Build();
        }

        /// <summary>
        /// 键/值应用程序配置根属性,继承IConfiguration
        /// </summary>
        public IConfigurationRoot Configuration { get; set; }

        /// <summary>
        /// 程序运行时调用此方法来添加一些服务到容器中
        /// </summary>
        /// <param name="services">服务集合</param>
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(
Configuration["Data:DefaultConnection:ConnectionString"])); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddMvc(); // Add application services.
// 使用依赖注入 services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); } /// <summary> /// 配置,通常有些中间件调用需要配置等 /// </summary> /// <param name="app">配置应用程序的请求管道</param> /// <param name="env"></param> /// <param name="loggerFactory">日志中间件</param> public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); try { using (var serviceScope = app.ApplicationServices
.GetRequiredService<IServiceScopeFactory>().CreateScope()) { serviceScope.ServiceProvider.GetService<ApplicationDbContext>() .Database.Migrate(); } } catch { } } //IIS HttpPlatformHandler 反向代理服务器进行交互的中间件模块 app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); app.UseStaticFiles(); app.UseIdentity(); //配置路由 app.UseMvc(routes => { routes.MapRoute( name: "areaRoute", template: "{area:exists}/{controller}/{action}", defaults: new { action = "Index" }); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routes.MapRoute( name: "api", template: "{controller}/{id?}"); }); } // Entry point for the application. public static void Main(string[] args) => WebApplication.Run<Startup>(args); } }
复制代码

3.程序运行

在vs2015开发中,可以用IIS Express直接运行,也可以选择web自宿主托管运行,如图:

当然,如果不用VS2015来运行,可以使用dnvm中dnx.exe(执行文件在clr里)工具来执行。

dnx.exe执行命令是对应project.json中commands配置:   

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },

进入DOS下,看dnvm能用不?

   

VS2015中创建ASP.NET5程序后,就自动安装好dnvm了。

再试一下dnu和dnx工具:

嘎嘎!不能用。那就执行一下:

进入项目中project.json文件所在目录,执行dnx web:

OK!在不shut down情况下,就可以通过http://localhost:5000访问啦。

当然假如发布后,也可以直接执行web.cmd运行的方式。

注:如果运行不成功的话。

一般是依赖包没有下载完整,可以使用dnu restore来安装。

二是使用的clr和project.json配置的框架不一致。

4.发布部署

可以在dos下使用dnu publish命令来发布。这种方式演示就略了。

在VS解决方案中的项目上,右键“Publish Web”:

选择File System……

发布出来的目录(三个文件夹):

进入approot目录下,可以执行web.cmd命令脚本运行啦!

通常实际生产时,如何在IIS部署呢? 这里使用windows 10企业版iis测试部署。

先安装iis:

只需要勾选一下Internet Information Services一项即可!

打开IIS管理器中的“获取新的Web平台组件”:

如果没有安装,先安装它。这里我在更新vs2015时,已经安装过。

添加-安装HttpPlatformHandler。

再配置编辑器,修改节:

并解除锁定节:

准备工作基本完成啦!添加网站:

注意:连接权限设置,应用程序池需要改为无托管代码的!

测试:

   

5.小结

本章内容非常简单,我尽可能地截图说明!希望初学者能够学会!

项目创建,傻瓜也会的;

结构概述,这里我也不能说得很清楚,很详细。

程序运行,不管是没发布时如何运行,连发布部署后,也说过啦。

发布部署,这里介绍vs2015上如何发布,也说过常用的IIS部署。

其它方式部署,最好linux或os系统演示啦!以后再补!

读者也可以参见https://get.asp.net/ 。微软做事一向是贴心小棉袄,资料文档整理很不错。

posted on 2015-12-13 00:37  HackerVirus  阅读(1827)  评论(1编辑  收藏  举报