Visual Studio 2014
开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)
2014-06-06 18:04 by 梁逸晨, 2149 阅读, 29 评论, 收藏, 编辑
新特性:
vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存)。
可以self-host模式运行,网站不再需要依赖IIS而运行,由此从此可以快速向客户演示开发进度,以及更好地支持真正跨平台(Linux、Mac、Unix)。
Web Api、Web Pages与MVC完全融为一体,统称MVC 6.0。在过去,输出JSON,既可以使用MVC自带的return JSON,也可以使用Web Api,这样分而治之的场面给整个社区都带来不良影响(JSON仅是其中一个例子,其它很多功能都是一样),现在,Web Api 完全融入了vNext,重复的轮子在这里终于得到终结。
支持Poco形式的Controller,代码更加干净。
云优化技术,也就是说在开发阶段,系统本身并不真正加载某个组件,而是在运行时才查询合适版本的组件,由此带来的好处是在Azure云主机、Mono主机和Windows主机上可以依赖最合适当前环境的某个组件Dll。
内置了依赖注入框架
使用Roslyn编译器,生成的代码更高效
与1~5.x的差异:
1:Project.json代替了从前的Web.config:
- 项目包的依赖项在dependencies节点中定义。
- configurations节点保存的是项目设置信息。
- commands节点保存的是self-host配置参数,例如本地绑定端口号。
- 自定义节点,例如自定义一个Data节点,在它的作用域中再定义一个DefaultConnectionString来记录数据库连接字符串。
2:Startup.cs代替了Global.asax
3:Views文件夹中不再需要专门的Web.config
当你添加某个引用(例如Entity Framework)的时候,需要网络实时加载,所以如果遇到“找不到某某类库”的错误时,不要担心,过一会就好了。但是,有可能在某个良辰吉日里,你无论等多久都没用,因为我们身在天朝,你懂的。
================================================
MVC的基本概念不变,依然是从前的 RouteTable、Controller、View、Action、Razor、Model
如果需要输出静态文件,例如 .html、.jpg,需要加载专门的处理流程,它们保存在Microsoft.AspNet.StaticFiles中。
下面我们开始构建一个vNext站点:
创建一个ASP.NET vNext 空项目

之后得到的目录结构,比从前简单多了:

首先配置project.json,在dependencies节点添加:

配置Startup.cs:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;using Microsoft.AspNet.Builder;using Microsoft.AspNet.StaticFiles;using Microsoft.Framework.DependencyInjection;using Microsoft.AspNet.Routing; namespace vNextTry{ public class Startup { public void Configure(IBuilder app) { app.UseStaticFiles(); //支持静态文件输出 app.UseServices(services => { services.AddMvc(); //加载MVC模块 }); app.UseMvc(routes => //加载路由配置 { routes.MapRoute( name: "Default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); }); } }} |
添加一个传统Controller:

|
1
2
3
4
5
6
7
8
9
|
using Microsoft.AspNet.Mvc; public class HomeController : Controller { public ActionResult Index() { return View(); } } |
添加一个Poco Controller:
|
1
2
3
4
5
6
7
8
|
public class JsonData //不需要继承自任何类 { public dynamic Index() { //就这样以非常干净简洁的方式输出JSON: {"id":1,"name":"i'm haha"} return new { id = 1, name = "i'm haha" }; } } |
添加一个View:
注意放置在Views/{controller名}/{这里是Index}.cshtml,母版页就不做了,Model、RenderBody等方法都和从前一样:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vNext</title>
</head>
<body>
<p>I'm vNext Index Page</p>
</body>
</html>
一切就此完成。现在就可以运行测试看看。

以self-host模式运行应用程序
self-host是MVC6的最大特点,我们的应用程序不再需要配置巨大的IIS,使得在客户机上快速演示应用程序不再困难。
通过设置project.json配置self-host(注意5001,那就是绑定的端口):
dependencies节点添加:"Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-0520"
"commands": {
"web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001"
}
然后保存、发布到输出目录(注意一定要先保存,等待nuget恢复加载包)
然后运行输出目录下的web.cmd,即可开启服务。

以IIS模式运行应用程序:
目前只能发布到安装了开发环境的本机IIS,但是根据它的运行逻辑,原则上也可以配置某些参数,让程序在远程服务器上运行,目前还没尝试,就不说了。
如是是64位系统,可能会遇到找不到KRE-svr50-x64.0.1-alpha-build-0446的问题,目前微软只提供了32位版本,我们只有把应用程序池设置为32位模式运行就可以解决了。


使用Web Api:
变得更简单了:
1:在Startup.cs中配置路由:
app.UseMvc(routes =>
{
routes.MapRoute("ApiRoute", "{controller}/{id?}");
});
2:在controller中:
using Microsoft.AspNet.Mvc; public class ValuesController : Controller
{
// GET /values
public string Get()
{
return "Values";
} // GET /values/1
public string Get(int id)
{
return "Value " + id.ToString();
} // POST /values
public ActionResult Post()
{
return new HttpStatusCodeResult(201);
}
}
就这样,不再需要加载任何包或DLL,不需要配置任何专有Config,API已经完全融合到MVC6中,访问 localhost:端口号/api类名
总体使用结论:
如果使用Visual Studio进行调试的过程中出现所有页面都“无法访问”,检查IIS Express的当前服务端口是否弹出IE窗口的端口一致,如果不一直,把Visual Studio关掉(并且检查系统进程,确保不再存在相关进程),重新打开Visual Studio就可以了。
因为包的加载涉及到运行时从nuget.org加载,所以某些把App放置在国内主机商的朋友们要做好心理准备。
为了不久的将来vNext运行于*nix系统,现在就应该注意一些事项:
- 严格遵守单词的大小写,特别是涉及到路径的字符串,vNext是为“真正全平台”打造的,否则将来你的程序在*nix系统(内核级就区分字母大小写)中运行会出错。
- 依然是*nix系统的问题,请不要再使用GB2312等奇葩编码,应该全局(源代码文件本身、Razor文件本身、Response.Encoding、Meta--CharSet、ConnectionString)统一使用UTF8,否则乱码百出找不到原因。
Visual Studio 2014的更多相关文章
- visual studio 2014 新特性
原文如下: Visual Studio "14" CTP Today, we are making available a first community technology p ...
- Visual Studio 2014安装包
点击下载
- 2014 Visual Studio Contact(); 直播笔记
昨天微软干了几件了不起的事:.NET开发环境将开源.跨平台支持(Mac OS X和Linux).多设备支持(WP.Android和iOS)和Visual Studio免费(Visual Studio ...
- 读书笔记2014第3本:Visual Studio程序员箴言
Visual Studio 2010是我经常使用的程序开发工具,也知道VS中有大量的快捷键可以帮助提高效率,可惜就是不愿意记忆,最近在学vim的时候快速把<Visual Studio程序员箴言& ...
- 如何利用 Visual Studio 自定义项目或工程模板
在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们 ...
- 如何利用 Visual Studio 自带工具提高开发效率
Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...
- Visual Studio高级调试技巧
1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...
- Visual Studio 2015 前端开发工作流
Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...
- Visual Studio 2013 Update 3 RTM 正式发布
VS2013.3 RTM已发布! 完整安装包:http://download.microsoft.com/download/6/F/0/6F0777D3-3541-465F-8639-A8F9D36B ...
随机推荐
- i++与++i哪个效率更高
简单的比较前缀自增运算符和后缀自增运算符的效率是片面的, 因为存在很多因素影响这个问题的答案. 首先考虑内建数据类型的情况: 如果自增运算表达式的结果没有被使用, 而是仅仅简单地用于增加一元操作数, ...
- JavaScript之函数作用域
有过类似C语言编程经验的同学应该都知道“块级作用域(block scope)”:花括号内的每一段代码都具有各自的作用域,而且在声明它们的代码段之外是不可见的.而在JavaScript中是没有块级作用域 ...
- PHP接口和抽象类的区别
原文引自: http://blog.csdn.net/sunlylorn/article/details/6124319 一. 抽象类abstract class 1 .抽象类是指在 class 前加 ...
- JMeter 怎么保存登录状态
在Recording Controller中添加一个HTTP Cookie Manager Recording Controller右键-->add-->config element--& ...
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...
- SQL随着子查询结果更新多个字段
笔者:iamlasong 要求:表格内容需要改变,在临时表中内容的变化,使用SQL官方声明更新表若干领域. 假设更新一个字段,直接用字段名=子查询就能够了,多个字段更新,将字段在括号里并列写出就可以, ...
- JAVA多线程编程(详细例子)
http://wenku.baidu.com/view/e4afbf36a32d7375a417808b.html
- who is the best?
Description There are N people want to choose the best person. Each person select the best person $a ...
- js 实现键盘记录 兼容FireFox和IE
这两天突然想弄弄js的键盘记录,所以就小研究了一下. 主要分四个部分 第一部分:浏览器的按键事件 第二部分:兼容浏览器 第三部分:代码实现和优化 第四部分:总结 第一部分:浏览器的按键事件 用js实现 ...
- C#程序读取MAC地址的五种方法(转)
public class GetMac { ///<summary> /// 根据截取ipconfig /all命令的输出流获取网卡Mac ///</summary> ///& ...