.NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序
今天坐高铁时尝试了一种学习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程序的更多相关文章
- .NET跨平台:在mac命令行下用vim手写ASP.NET 5 MVC程序
昨天在 Mac 上手写了一个最简单的 ASP.NET 5 程序,直接在 Startup.cs 中通过 Response.WriteAsync() 输出响应内容,详见 .NET跨平台:在Mac上跟着错误 ...
- php文件上传错误信息说明对照表
php文件上传错误信息说明对照表: UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini中upload_ma ...
- strut2 自己定义文件上传错误信息
在文件上传过程中我们能够指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> &l ...
- php文件上传错误信息
错误信息说明 UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功 UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini和upload_max_filesize ...
- strut2 自定义文件上传错误信息
在文件上传过程中我们可以指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> &l ...
- Sharepoint2013:在页面上显示错误信息
在sharepoint2013中我们需要修改以下三处的web.config,以显示错误信息 1, C:\inetpub\wwwroot\wss\VirtualDirectories\端口号\web.c ...
- 【.NET跨平台】mac上安装VS for mac步骤详解
安装过程中提示以下内容 提示原文如下 It was not possible to complete an automatic installation. This might be due to a ...
- 变色龙启动MAC时,错误信息“ntfs_fixup: magic doesn't match:”的解决办法
如下是变色龙启动的bdmesg,解决办法就是用mac的磁盘管理器,对ntfs分区进行检验修复.需要安装ntfs的驱动支持. 实在不行,就删除调整过大小的分区,重新用Windows的磁盘管理器重新分区. ...
- 在Mac上使用Visual Studio Code开发/调试.NET Core代码
.Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今天抽空研究了下在Mac下如何使用VS Code来开发.NET Core程序,并且调 ...
随机推荐
- Python 之WEB前端插件
1.Font Awesome ---- 设计字体,图标 2.EasyUI ---- 各种功能 3.JqueryUI ---- 类似EasyUI 4.bootstrap ---- 必须引入JQuery( ...
- 论velocity在不同后台语言下的不同
第一家公司使用asp.net开发的,本人从事前端工作.当时用velocity写模板程序记得也没配置啥,我就记得写了rewrite,html页面里头直接写的velocity. 现在公司用的java开发的 ...
- ecshop的特点,持续加新
一.目录文件结构 入口文件index.php,define('IN_ECS', true); 只有为true时才可以进入. 首先加入init.php,在这个文件里: @ini_set('memory_ ...
- Oracle SQL优化一(常见方法)
1.表访问方式优化: a)普通表优先“Index Lookup 索引扫描”,避免全表扫描 大多数场景下,通过“Index Lookup 索引扫描”要比“Full Table Scan (FTS) 全表 ...
- rutime中动态调用类的方法
Dynamically invoke a class method in Objective C 代码 #import <Foundation/Foundation.h> #import ...
- ASP.NET MVC应用程序执行过程分析
ASP.NET MVC应用程序执行过程分析 2009-08-14 17:57 朱先忠 朱先忠的博客 字号:T | T ASP.NET MVC框架提供了支持Visual Studio的工程模板.本文 ...
- GsonWithoutObject 没有对象(脱离对象) 直接提取 ... gson json
GsonWithoutObject 脱离对象, 直接提取 package temp; import tool.FileTool; import com.google.gson.JsonElement; ...
- (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- cadence学习之原理图——连线
重点: (1)两种连接方式:Place Net和Place Net Alias (2)交叉线之间的电气连接Place Junction (3)引脚悬空 Place no connect (4)两器件管 ...
- myBatis自动生成mapping,dao和model
myBatis没有自动封装实体类.所以都需要自己编写,但是表数据过多时.编写难度就会增加,错误率也会增加! 所以myBatis提供mybatis-generator-core-1.3.2-bundle ...