今天坐高铁时尝试了一种学习ASP.NET 5的笨方法,从空文件夹开始,根据运行dnx . kestrel命令的错误信息,一步一步写代码,直至将一个最简单的ASP.NET程序运行起来。

尝试的具体步骤如下。

新建一个空文件夹HelloCnblogs:

mkdir HelloCnblogs && cd $_

在这个空HelloCnblogs文件夹中运行 dnx . kestrel 命令(基于CoreCLR的dnx),运行结果是如下的出错信息:

System.InvalidOperationException: Unable to resolve project 'HelloCnblogs' from /Git/HelloCnblogs
at Microsoft.Framework.Runtime.ApplicationHostContext..ctor
...

添加一个空project.json文件(命令为touch project.json),运行dnx . kestrel命令,错误信息如下:

Error: Microsoft.Framework.Runtime.FileFormatException: 
The JSON file can't be deserialized to a JSON object.
at Microsoft.Framework.Runtime.Project.GetProjectFromStream(
Stream stream, String projectName, String projectPath, ICollection`1 diagnostics)

在project.json文件中添加 {} ,运行dnx . kestrel命令,错误信息如下:

System.InvalidOperationException: Unable to load application or execute command 'kestrel'.
at Microsoft.Framework.ApplicationHost.Program.ThrowEntryPointNotfoundException(
DefaultHost host, String applicationName, Exception innerException)

在project.json中添加kestrel command:

"commands": {
"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:8080"
}

运行dnx . kestrel,出错信息如下:

System.InvalidOperationException: Unable to load application or execute command 'Microsoft.AspNet.Hosting'.
Available commands: kestrel.
at Microsoft.Framework.ApplicationHost.Program.ThrowEntryPointNotfoundException(
DefaultHost host, String applicationName, Exception innerException)

在project.json中添加对Kestrel的引用

"dependencies": {
"Kestrel": "1.0.0-*"
}

运行dnu restore之后(基于mono的dnu),再运行dnx . kestrel,出错信息变为:

System.InvalidOperationException:
Failed to resolve the following dependencies for target framework 'DNXCore,Version=v5.0':
Kestrel 1.0.0-beta6-11871

在project.json中添加frameworks:

"frameworks": {
"dnxcore50": { }
}

运行dnu restore && dnx . kestrel,出现错误:

System.InvalidOperationException: A type named 'StartupProduction' or 'Startup' could not be found in assembly 'HelloCnblogs'.
at Microsoft.AspNet.Hosting.Startup.StartupLoader.FindStartupType(String startupAssemblyName, IList`1 diagnosticMessages)

创建Startup.cs文件,并添加一个Startup类:

namespace HelloCnblogs
{
public class Startup
{
}
}

继续dnx . kestrel,出现错误:

System.InvalidOperationException:
A method named 'ConfigureProduction' or 'Configure' in the type 'HelloCnblogs.Startup' could not be found.
at Microsoft.AspNet.Hosting.Startup.StartupLoader.FindMethod(
Type startupType, String methodName, String environmentName, Type returnType, Boolean required)

给Startup类添加Configure方法:

public class Startup
{
public void Configure(IApplicationBuilder app)
{
}
}

继续dnx . kestrel,出现错误:

error CS0246: The type or namespace name 'IApplicationBuilder' could not be found (are you missing a using directive or an assembly reference?)

在Startup.cs中添加命名空间:

using Microsoft.AspNet.Builder;

继续dnx . kestrel,这次成功运行!

Started

这里用浏览器访问 http://localhost:8080/ ,能成功访问,但页面一片空白,因为我们在程序中没进行任何内容输出操作。

于是,在Startup.cs中添加输入内容的代码:

public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context => await context.Response.WriteAsync("Hello, cnblogs!"));
}
}

继续用dnx . kestrel命令运行,出现错误:

error CS1061: 'HttpResponse' does not contain a definition for 'WriteAsync' and no extension method 'WriteAsync' accepting a first argument of type 'HttpResponse' could be found (are you missing a using directive or an assembly reference?)

在Startup.cs中添加命名空间:

using Microsoft.AspNet.Http;

再次运行,成功!

$ dnx . kestrel
Started

浏览器访问 http://localhost:8080/ ,得到正常的响应内容:

Hello, cnblogs!

通过这样的试错法,得到了运行一个最简单的ASP.NET 5程序的最小配置:

一个文件夹,2个文件(project.json与Startup.cs)。

project.json文件中的内容:

{
"commands": {
"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:8080"
},
"dependencies": {
"Kestrel": "1.0.0-*"
},
"frameworks": {
"dnxcore50": { }
}
}

Startup.cs中的内容:

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http; namespace HelloCnblogs
{
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context => await context.Response.WriteAsync("Hello, cnblogs!"));
}
}
}

虽然是用最笨的方法写了一个最简单的程序,但是这么动手操作一次,感觉就是不一样。

.NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序的更多相关文章

  1. .NET跨平台:在mac命令行下用vim手写ASP.NET 5 MVC程序

    昨天在 Mac 上手写了一个最简单的 ASP.NET 5 程序,直接在 Startup.cs 中通过 Response.WriteAsync() 输出响应内容,详见 .NET跨平台:在Mac上跟着错误 ...

  2. php文件上传错误信息说明对照表

    php文件上传错误信息说明对照表: UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini中upload_ma ...

  3. strut2 自己定义文件上传错误信息

    在文件上传过程中我们能够指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> &l ...

  4. php文件上传错误信息

    错误信息说明 UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功 UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini和upload_max_filesize ...

  5. strut2 自定义文件上传错误信息

    在文件上传过程中我们可以指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> &l ...

  6. Sharepoint2013:在页面上显示错误信息

    在sharepoint2013中我们需要修改以下三处的web.config,以显示错误信息 1, C:\inetpub\wwwroot\wss\VirtualDirectories\端口号\web.c ...

  7. 【.NET跨平台】mac上安装VS for mac步骤详解

    安装过程中提示以下内容 提示原文如下 It was not possible to complete an automatic installation. This might be due to a ...

  8. 变色龙启动MAC时,错误信息“ntfs_fixup: magic doesn't match:”的解决办法

    如下是变色龙启动的bdmesg,解决办法就是用mac的磁盘管理器,对ntfs分区进行检验修复.需要安装ntfs的驱动支持. 实在不行,就删除调整过大小的分区,重新用Windows的磁盘管理器重新分区. ...

  9. 在Mac上使用Visual Studio Code开发/调试.NET Core代码

    .Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今天抽空研究了下在Mac下如何使用VS Code来开发.NET Core程序,并且调 ...

随机推荐

  1. shopnc 二次开发 每日签到积分领取

    /* 开始shopnc!!!!! url:xxx.com/index.php?act=index&op=userjf 一个四线城市的半吊子程序员~ 实现:前台模板文件 随便加入<a> ...

  2. css绘制特殊图形基础

    1.等腰三角形 .isosceles{ width:; height:; border:30px solid; border-left-color: transparent; border-right ...

  3. linux-curl restful接口测试结果格式化

    最近在做restful api, 因为服务器不能直接访问, 所以测试只能通过ScureCRT 在一台linux 上curl. 但是返回结果很多的时候, 发现:草, 这个数据怎么都是乱码? 一大堆数据, ...

  4. JSP(forward动作)登录功能

    <%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...

  5. python第十二天-----RabbitMQ

    有一位小伙伴说让我去A站写博客可能会有很多人喜欢,真是搞不懂,北方哪里有卖萌?北方默认状态就是这么萌的!再者说了,这明明就是很专注于技术的博客嘛,能不能严肃点!知不知道什么叫帧? 学习到了数据库的相关 ...

  6. [html]兼容 IE6 IE7 的简单网页框架

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. HTML5和CSS3基础教程(第8版)-读书笔记(3)

    第11章 用CSS 进行布局 网站设计主要有两大类型:固定宽度和响应式. 对于固定(fixed)布局,整个页面和每一栏都有基于像素的宽度.顾名思义,无论是使用移动电话和平板电脑等较小的设备查看页面,还 ...

  8. wpf:样式(转)

    http://www.cnblogs.com/shuang121/archive/2013/01/14/2860455.html 前面简单的说到了wpf中几种样式的用法,wpf有着类似web中的CSS ...

  9. C#的UDP服务器

    最新优化版本 /* http://www.cnblogs.com/zengqinglei/archive/2013/04/27/3046119.html */ using System; using ...

  10. Two-Phase Commit (两阶段提交)

    1. 流程 1) Coordinator (协调者) 广播 VOTE-REQ 给所有 Participant (参与者) 2) Coordinator 等待 Participant 的结果 3) Pa ...