2016-07-08 8 views
21

Не могли бы вы поделиться с ним минимальным рабочим проектом ASP.NET Core, написанным на F #?ASP.NET Core 1.0 F # project

Для реализации минимального демо в C#, мы должны сделать следующее:

mkdir aspnetcoreapp 
cd aspnetcoreapp 
dotnet new 

Затем редактировать project.json:

{ 
    "version": "1.0.0-*", 
    "buildOptions": { 
    "debugType": "portable", 
    "emitEntryPoint": true 
    }, 
    "dependencies": {}, 
    "frameworks": { 
    "netcoreapp1.0": { 
     "dependencies": { 
     "Microsoft.NETCore.App": { 
      "type": "platform", 
      "version": "1.0.0" 
     }, 
     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0" 
     }, 
     "imports": "dnxcore50" 
    } 
    } 
} 

Затем выполняют dotnet restore и использовать происходит некорректно код:

Startup.cs:

using System; 
using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Http; 

namespace aspnetcoreapp 
{ 
    public class Startup 
    { 
     public void Configure(IApplicationBuilder app) 
     { 
      app.Run(context => 
      { 
       return context.Response.WriteAsync("Hello from ASP.NET Core!"); 
      }); 
     } 
    } 
} 

Program.cs:

using System; 
using Microsoft.AspNetCore.Hosting; 

namespace aspnetcoreapp 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseStartup<Startup>() 
       .Build(); 

      host.Run(); 
     } 
    } 
} 

Затем выполните dotnet run. Может ли кто-нибудь дать мне подсказку, как сделать то же самое в F #?

+0

Привет, я подумал, что если вы заинтересованы в F # ASP.NET Core, тогда вам может быть интересна эта библиотека NuGet: https://github.com/dustinmoris/AspNetCore.Lambda. Я также написал об этом здесь: https://dusted.codes/functional-aspnet-core – dustinmoris

ответ

21

Я недавно изучал новое ядро ​​.net и столкнулся с тем же вопросом. На самом деле, это довольно легко сделать.

Добавить F ссылки # во время выполнения в ваш project.json:

{ 
    "version": "1.0.0-*", 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "compilerName": "fsc", 
    "compile": "**/*.fs" 
    }, 
    "dependencies": { 
    "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160509", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0" 
    }, 
    "tools": { 
    "dotnet-compile-fsc": { 
     "version": "1.0.0-preview2-*", 
     "imports": [ 
     "dnxcore50", 
     "portable-net45+win81", 
     "netstandard1.3" 
     ] 
    } 
    }, 
    "frameworks": { 
    "netcoreapp1.0": { 
     "dependencies": { 
     "Microsoft.NETCore.App": { 
      "type": "platform", 
      "version": "1.0.0" 
     } 
     }, 
     "imports": [ 
     "portable-net45+win8", 
     "dnxcore50" 
     ] 
    } 
    } 
} 

Затем положить код ниже в ваш Program.fs:

open System 
open Microsoft.AspNetCore.Hosting 
open Microsoft.AspNetCore.Builder 
open Microsoft.AspNetCore.Hosting 
open Microsoft.AspNetCore.Http 


type Startup() = 
    member this.Configure(app: IApplicationBuilder) = 
     app.Run(fun context -> context.Response.WriteAsync("Hello from ASP.NET Core!")) 


[<EntryPoint>] 
let main argv = 
    let host = WebHostBuilder().UseKestrel().UseStartup<Startup>().Build() 
    host.Run() 
    printfn "Server finished!" 
    0 

Просто, кстати, это очень важно определить свой класс запуска, как type Startup() не type Startup. В противном случае во время запуска произойдет сбой Kestrel.

+2

Демо-версия здесь: https://github.com/pshirshov/asp-net-core-f-sharp-example –

+1

Фантастический ! Это действительно работает! Может ли он быть развернут в Heroku с любым buildpack? – fpawel

+1

У меня нет опыта работы с Heroku, но если Heroku поддерживает основные приложения .net, это определенно должно работать. –

25

Я думаю, что вы ищете --lang переключатель.

Так что единственное изменение, чтобы получить основание F # проект будет:

dotnet new --lang fsharp 

Вы можете следить ответ Павла для реальной логики ASP.NET.

Edit:

Кстати, fsharp может быть также заменен f# и fs, как это упоминается в PR.

И есть еще issue, в котором предлагаются изменения dotnet new, чтобы разрешить создание шаблонов.

Edit 2:

Новый инструмент поддерживает несколько шаблонов:

Templates         Short Name  Language  Tags 
-------------------------------------------------------------------------------------- 
Console Application      console   [C#], F#  Common/Console 
Class library        classlib  [C#], F#  Common/Library 
Unit Test Project       mstest   [C#], F#  Test/MSTest 
xUnit Test Project      xunit   [C#], F#  Test/xUnit 
Empty ASP.NET Core Web Application  web    [C#]   Web/Empty 
MVC ASP.NET Core Web Application   mvc    [C#], F#  Web/MVC 
Web API ASP.NET Core Web Application  webapi   [C#]   Web/WebAPI 
Solution File        sln       Solution 

Пример использования:

X:\>dotnet new mvc -n MyFsharpProject -lang F# 
Content generation time: 309.5706 ms 
The template "MVC ASP.NET Core Web Application" created successfully. 
Смежные вопросы