.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!"));
        }
    }
}

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

时间: 2024-10-13 02:22:51

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

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

昨天在 Mac 上手写了一个最简单的 ASP.NET 5 程序,直接在 Startup.cs 中通过 Response.WriteAsync() 输出响应内容,详见 .NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序. 今天接着昨天的代码,用 vim 一步一步手写一个最简单的 ASP.NET 5 MVC 程序. 先创建 Controllers 文件夹: mkdir Controllers && cd $_ 接着创建 HomeController.cs 文件: vi H

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

在文件上传过程中我们能够指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> <param name="maximumSize">500000</param> <param name="allowedTypes">application/vnd.ms-excel</param> <param na

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

在sharepoint2013中我们需要修改以下三处的web.config,以显示错误信息 1, C:\inetpub\wwwroot\wss\VirtualDirectories\端口号\web.config 1>将customErrors元素中的mode将成Off <customErrors mode="Off" /> 2>将SafeMode中的CallStack改成True <SafeMode MaxControls="200"

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

安装过程中提示以下内容 提示原文如下 It was not possible to complete an automatic installation. This might be due to a problem with your network, proxy servers or an unsolvable installation conflict. At this point, you can continue the installation by manually downloa

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

Mac上使用Visual Studio Code开发/调试.NET Core代码 .Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今天抽空研究了下在Mac下如何使用VS Code来开发.NET Core程序,并且调试代码. 1.安装.NET Core 在mac上打开终端: ~$ brew update ~$ brew install openssl ~$ brew link --force openssl 如果不能使用brew命

PHP error_log()将错误信息写入日志文件

error_log() 是发送错误信息到某个地方的一个函数,在程序编程中比较常见,尤其是在程序调试阶段. bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) 把错误信息发送到 web 服务器的错误日志,或者到一个文件里. message 应该被记录的错误信息.信息长度限制:The default seem to be 1024

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

.Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今天抽空研究了下在Mac下如何使用VS Code来开发.NET Core程序,并且调试代码. 1.安装.NET Core 在mac上打开终端: ~$ brew update ~$ brew install openssl ~$ brew link --force openssl 如果不能使用brew命令,先安装homebrew,玩转Mac必备. 下载.NET Core SDK:ht

Android错误信息的汇总

犯过的错给自己提个醒 [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement! [2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2) 原因: 不影响正常运行.在AndroidManifest.xml文件中没有加API的版本号,在<manifest> </

清理Mac上的软件容易吗?

通常我们将Mac上的软件清楚一般是打开“Finder”,然后点击左侧的“应用程序”,把相应的软件直接拖到“废纸篓中”,这就算卸载了.但是这样真的清理干净了吗? 大多数人都认为Mac的系统功能强大,自我清理功能好,无需使用专门的工具来清理,其实如果我们一直这样认为那就大错特错了,无论是Windows还是Mac系统其实都需要我们的清理,CleanMyMac3清理工具就可以安全彻底清理Mac上的软件,并且你无需担心它本身的存在,它还同时存在一个“自杀”功能,让你无后顾之忧.除了软件清理,对系统清理的功