Возникли проблемы с шаблоном Giraffe на Mac M1 , поэтому решил настроить проект Giraffe вручную. Начал следовать разделу Делаем это вручную в README Giraffe, но сразу застрял, и я также не увидел нигде упоминаний о том, как можно обслуживать проект.
Для справки: документы Giraffe великолепны. Я новичок в .NET, поэтому мне приходится сталкиваться с основами управления проектами .NET, F# и ASP.NET Core. Было бы неразумно ожидать, что эти темы будут раскрыты там.





Мне приходится постоянно напоминать себе, что
проект Giraffe подключается к конвейеру ASP.NET Core или сам по себе является приложением ASP.NET Core.
, поэтому, если я не могу найти ответы на свои вопросы в документации Giraffe , то, вероятно, это потому, что это тема ASP.NET Core (или F# / .NET / и т. д.).
Шаги 0–5. Следуйте статье Начало работы с F# с помощью инструментов командной строки (.NET | Microsoft Learn).
(НЕОБЯЗАТЕЛЬНО) Создайте новое решение.
dotnet new sln -o SampleSolution
Введите каталог решения.
cd SampleSolution
Создайте пустой проект ASP.NET Core.
dotnet new web -lang "F#" -o src/GiraffeWebExample
ИНФОРМАЦИЯ Доступные шаблоны
dotnet newдоступны по ссылкам ниже. (Кажется, оба перечисляют их все, но не уверен, какой из них более актуален.)
- [Microsoft Learn][.NET CLI] Шаблоны .NET по умолчанию для новых dotnet
- [Microsoft Learn][.NET CLI] новый <ШАБЛОН>
(НЕОБЯЗАТЕЛЬНО) Добавьте в решение новый проект.
dotnet sln add src/GiraffeWebExample/GiraffeWebExample.fsproj
Введите каталог проекта.
cd src/GiraffeWebExample/
Установите зависимости.
dotnet add package Microsoft.AspNetCore.App
dotnet add package Giraffe
ПРИМЕЧАНИЕ. При добавлении жирафа я получил предупреждение ниже, поэтому для полноты просто вставьте его сюда:
/usr/local/share/dotnet/sdk/8.0.202/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.Shared.targets(111,5): warning NETSDK1080: A PackageReference to Microsoft.AspNetCore.App is not necessary when targeting .NET Core 3.0 or higher. If Microsoft.NET.Sdk.Web is used, the shared framework will be referenced automatically. Otherwise, the PackageReference should be replaced with a FrameworkReference. [/Users/toraritte/dev/shed/dotnet/giraffe/ByHand/src/ByHand/ByHand.fsproj]
Добавьте «точку входа».
ПРИМЕЧАНИЕ. До сих пор не выяснили, какие еще способы .NET можно использовать для настройки веб-проекта, но атрибут
EntryPointописан в статье [Microsoft Learn][Руководство по F#] Консольные приложения и явные точки входа.
Я решил просто скопировать один из примеров кода из раздела Делаем это вручную; Я предпочитаю более функциональный подход, поэтому вот второй:
open System
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Hosting
open Microsoft.Extensions.Hosting
open Microsoft.Extensions.DependencyInjection
open Giraffe
let webApp =
choose [
route "/ping" >=> text "pong"
route "/" >=> htmlFile "/pages/index.html" ]
let configureApp (app : IApplicationBuilder) =
// Add Giraffe to the ASP.NET Core pipeline
app.UseGiraffe webApp
let configureServices (services : IServiceCollection) =
// Add Giraffe dependencies
services.AddGiraffe() |> ignore
[<EntryPoint>]
let main _ =
Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(
fun webHostBuilder ->
webHostBuilder
.Configure(configureApp)
.ConfigureServices(configureServices)
|> ignore)
.Build()
.Run()
0
Запустить/обслуживать проект.
dotnet watch run
ИНФОРМАЦИЯ Началось со статьи Начало работы с ASP.NET Core в документации ASP.NET Core.