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

时间:2023-01-01 11:35:08

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

 

1.项目创建

ASP.NET5项目模板有三种:

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

新建项目:

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

选择模板:

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

2.结构概述

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

References对应配置是project.json中:

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

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

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

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

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

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

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();

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

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

Bower的使用配置文件是:

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

npm插件安装配置文件是:

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

当然npm插件使用需要:

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

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

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

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

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

Controllers是控制器。

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

Models是实体模型类。

Services是功能/业务实现类。

ViewModels是视图模型类。

Views是视图文件。

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

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

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

NET5实践:项目创建-结构概述-程序运行-发布部署
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);
}
}
NET5实践:项目创建-结构概述-程序运行-发布部署

3.程序运行

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

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

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

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

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

进入DOS下,看dnvm能用不?

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

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

再试一下dnu和dnx工具:

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

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

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

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

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

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

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

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

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

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

4.发布部署

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

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

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

选择File System……

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

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

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

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

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

先安装iis:

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

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

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

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

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

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

添加-安装HttpPlatformHandler。

再配置编辑器,修改节:

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

并解除锁定节:

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

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

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

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

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

测试:

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

5.小结

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

项目创建,傻瓜也会的;

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

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

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

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

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

NET5实践:项目创建-结构概述-程序运行-发布部署的更多相关文章

  1. ASP&period;NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)

    Web程序如何发布部署呢.网站项目做好了,需要发布出来,提交给客户,装上服务器.那怎么在ASP.NET开发环境中将网站程序发布出来呢 ^_^   工具/原料 Visual Studio 2010  ( ...

  2. 快速搞懂&period;NET 5&sol;&period;NET Core应用程序的发布部署

    .NET Framework时代,.NET 应用程序大多直接部署运行在Windows服务器上,当然也可以通过Mono部署运行在Linux上.无论部署exe,还是IIS站点.或是Windows Serv ...

  3. 1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg

     1 游戏逻辑架构 具体介绍 A 一个导演同一时间仅仅能执行一个场景,场景其中,能够同一时候载入多个层,一个层能够可载多个精灵.层中亦能够加层. B  场景切换 sceneàaddChild(la ...

  4. 【pycharm基本操作】项目创建、切换、运行、字体颜色设置,常见包的安装步骤

    创建新项目 退出项目 怎样区别虚拟环境和系统环境? 虚拟环境和系统环境切换:进入项目切换解释器 切换项目 创建python目录和文件 代码运行方式一: 还可以这样执行代码方式二: 文件的剪切.复制.删 ...

  5. IDEA的Tomcat配置Web的项目创建以及Servlet简单运行。

    相关软件: 1.IDEA编译器 2.JDK 3.Tomcat          (相关软件都可以到官网上下载,老表提示:不要下载最新版本因为不要做试验品)   IDEA的安装非常简单,找好安装的盘,n ...

  6. 下载eclipse 配置eclipse 新建Java项目 写一个小程序 运行

    为了更好的学习java,我打算下载个eclipse 地址:https://www.eclipse.org/downloads/packages/ 我们需要下载的版本是Eclipse IDE for J ...

  7. 【朝夕Net社区技术专刊】Core3&period;1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇

    欢迎大家阅读<朝夕Net社区技术专刊>第1期 原文是我在知乎发表的,现在在这里分享! 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为首 ...

  8. Qt入门之基础篇 &lpar; 二 &rpar; :Qt项目建立、编译、运行和发布过程解析

    转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...

  9. cocos2dx - 环境配置,项目创建

    准备工具 cocos2dx当前最新版本:v3.9       官网下载地址: http://www.cocos.com/download/ python 2.7x最新版本:2.7.11       官 ...

随机推荐

  1. Memcache学习笔记

    以下内容大部分来自网络,小部分是本人遇到的问题融合后的记录. 先贴一段涨姿势~ Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全 ...

  2. iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法&lpar;任意页面横竖屏或禁止&rpar;

    iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法 时间 2015-07-14 20:59:00  博客园-原创精华区 原文  http://www.cnblogs.com/fe ...

  3. java selenium 题目一 如果定位动态变化的id

    题目 HTML 代码如下 <a id="username-1190" class="class1">用户名</a> 因为id是由java ...

  4. 教你怎么安装Redis

    以下命令以root用户运行:#cd /tmp/#wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz#tar xzf redis-2.6 ...

  5. Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数

    Mysql怎么判断繁忙,innodb的主要参数,checkpoint机制,show engine innodb status   2018年07月13日 15:45:36 anzhen0429 阅读数 ...

  6. Tomcat&plus;Redis&plus;Nginx实现session共享(Windows版)

    redis安装:xx nginx安装:xx 步骤: 1.下载tomcat-redis-session-manager相应的jar包,主要有三个: wget https://github.com/dow ...

  7. 机器学习P7

    优化问题: https://www.cnblogs.com/liaohuiqiang/p/7805954.html KKT条件就是把高数里面求不等式约束条件问题的分类方法写成两个条件.

  8. M100&lpar;3&rpar; 无线数传

    本文记录了无线数传配合地面Windos qt写的飞机控制SDK软件的使用过程 使用了两种类型无线数传 遇到问题 1 界面卡死问题 1.1 数传问题 问题描述: 使用非官方数传,点击active按键和一 ...

  9. java基础62 JavaScript中的函数(网页知识)

    1.JavaScript中,函数的格式 function 函数名(形参列表){ 函数体; } 2.JavaScript中,函数需要注意的细节 1.在javaScript中,函数定义形参时,是不能使用v ...

  10. onvif协议client与server对接

    happytimesoft有完整的c语言开发的onvif client和server,一共1000$,真便宜,haha. http://www.happytimesoft.com/products/m ...