2016-07-08 21 views
21

Czy ktoś mógłby podzielić się minimalnym roboczym projektem aplikacji ASP.NET Core napisanym w języku F #?Projekt ASP.NET Core 1.0 F #

celu realizacji minimalny demo w języku C#, musimy wykonać następujące czynności:

mkdir aspnetcoreapp 
cd aspnetcoreapp 
dotnet new 

Następnie edytować 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" 
    } 
    } 
} 

Następnie wykonaj dotnet restore i użyć kodu follwoing:

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(); 
     } 
    } 
} 

Następnie wykonaj dotnet run. Czy ktokolwiek mógłby dać mi wskazówkę, jak zrobić to samo w F #?

+0

Cześć, myślałem, jeśli jesteś zainteresowany w F # ASP.Rozwój NET Core może zainteresować Cię ta biblioteka NuGet: https://github.com/dustinmoris/AspNetCore.Lambda. Blogowałem też o tym tutaj: https://dusted.codes/functional-aspnet-core – dustinmoris

Odpowiedz

21

Ostatnio odkryłem nowe jądro .net i stanąłem przed tym samym pytaniem. W rzeczywistości dość łatwo to zrobić.

Dodaj F referencje # wykonawcze do swojego 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" 
     ] 
    } 
    } 
} 

następnie umieścić kod poniżej do swojej 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 

Tak nawiasem mówiąc, to bardzo ważne, aby zdefiniować klasę startowy jak nie type Startup()type Startup. W przeciwnym razie środowisko uruchomieniowe Kestrel ulegnie awarii podczas uruchamiania.

+2

Proszę znaleźć wersję demonstracyjną tutaj: https://github.com/pshirshov/asp-net-core-f-sharp-example –

+1

Fantastic ! To naprawdę działa! Czy można go wdrożyć w Heroku przy użyciu dowolnego buildpacka? – fpawel

+1

Nie mam doświadczenia z Heroku, ale jeśli Heroku obsługuje podstawowe aplikacje .net, to zdecydowanie powinno działać. –

25

Myślę, że to, czego szukasz, to przełącznik --lang.

Więc jedyną zmianą, aby uzyskać # projekt bazowy F będą:

dotnet new --lang fsharp 

Następnie można śledzić odpowiedzi Pavel za rzeczywistą logiki ASP.NET.

Edit:

Nawiasem mówiąc, fsharp można również zastąpić f# i fs, jak to wspomniano w PR.

I jest jeszcze jeden issue, który proponuje zmiany w dotnet new, aby umożliwić szablony.

Edycja 2:

Nowe oprzyrządowanie obsługuje więcej szablonów:

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 

Przykład użycia:

X:\>dotnet new mvc -n MyFsharpProject -lang F# 
Content generation time: 309.5706 ms 
The template "MVC ASP.NET Core Web Application" created successfully. 
Powiązane problemy