From 66b322d1a2dc3c3027c7ed1df780fdc277ae3570 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 13:11:41 -0800 Subject: [PATCH 1/9] Adding Aspire host project --- OrchardCore.sln | 26 +++- .../Aspire.AppHost/Aspire.AppHost.csproj | 20 +++ src/Aspire/Aspire.AppHost/Program.cs | 5 + .../Properties/launchSettings.json | 16 +++ .../appsettings.Development.json | 8 ++ src/Aspire/Aspire.AppHost/appsettings.json | 9 ++ .../Aspire.OrchardCore.Cms.Web.csproj | 32 +++++ .../Localization/.placeholder | 1 + .../Aspire.OrchardCore.Cms.Web/NLog.config | 32 +++++ .../Aspire.OrchardCore.Cms.Web/Program.cs | 24 ++++ .../Properties/launchSettings.json | 38 ++++++ .../appsettings.Development.json | 8 ++ .../appsettings.json | 8 ++ .../Aspire.ServiceDefaults.csproj | 24 ++++ .../Aspire.ServiceDefaults/Extensions.cs | 119 ++++++++++++++++++ src/OrchardCore.Cms.Web/Program.cs | 2 +- src/OrchardCore.Mvc.Web/Program.cs | 2 +- 17 files changed, 371 insertions(+), 3 deletions(-) create mode 100644 src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj create mode 100644 src/Aspire/Aspire.AppHost/Program.cs create mode 100644 src/Aspire/Aspire.AppHost/Properties/launchSettings.json create mode 100644 src/Aspire/Aspire.AppHost/appsettings.Development.json create mode 100644 src/Aspire/Aspire.AppHost/appsettings.json create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/NLog.config create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/Properties/launchSettings.json create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.Development.json create mode 100644 src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json create mode 100644 src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj create mode 100644 src/Aspire/Aspire.ServiceDefaults/Extensions.cs diff --git a/OrchardCore.sln b/OrchardCore.sln index 5fd2aa48730..c0ec2ad4d9a 100644 --- a/OrchardCore.sln +++ b/OrchardCore.sln @@ -505,7 +505,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Sms.Abstraction EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Sms", "src\OrchardCore.Modules\OrchardCore.Sms\OrchardCore.Sms.csproj", "{CBF6DB53-FD0C-47F8-9E60-A1D247ACFD05}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCore.Sms.Core", "src\OrchardCore\OrchardCore.Sms.Core\OrchardCore.Sms.Core.csproj", "{20356393-B16D-466C-8203-877A534E287D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Sms.Core", "src\OrchardCore\OrchardCore.Sms.Core\OrchardCore.Sms.Core.csproj", "{20356393-B16D-466C-8203-877A534E287D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.AppHost", "src\Aspire\Aspire.AppHost\Aspire.AppHost.csproj", "{B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.ServiceDefaults", "src\Aspire\Aspire.ServiceDefaults\Aspire.ServiceDefaults.csproj", "{C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Aspire", "Aspire", "{5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.OrchardCore.Cms.Web", "src\Aspire\Aspire.OrchardCore.Cms.Web\Aspire.OrchardCore.Cms.Web.csproj", "{3DE87BB4-BA03-4C02-861F-6EE51898E682}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1335,6 +1343,18 @@ Global {20356393-B16D-466C-8203-877A534E287D}.Debug|Any CPU.Build.0 = Debug|Any CPU {20356393-B16D-466C-8203-877A534E287D}.Release|Any CPU.ActiveCfg = Release|Any CPU {20356393-B16D-466C-8203-877A534E287D}.Release|Any CPU.Build.0 = Release|Any CPU + {B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}.Release|Any CPU.Build.0 = Release|Any CPU + {C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF}.Release|Any CPU.Build.0 = Release|Any CPU + {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1566,6 +1586,10 @@ Global {2D93F509-1FB3-4E22-92F0-588D0EFBA921} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {CBF6DB53-FD0C-47F8-9E60-A1D247ACFD05} = {A066395F-6F73-45DC-B5A6-B4E306110DCE} {20356393-B16D-466C-8203-877A534E287D} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} + {B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91} = {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} + {C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF} = {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} + {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} = {275E087F-A4E2-4A7B-A924-ED68E3A52086} + {3DE87BB4-BA03-4C02-861F-6EE51898E682} = {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {46A1D25A-78D1-4476-9CBF-25B75E296341} diff --git a/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj b/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj new file mode 100644 index 00000000000..c2b82d89371 --- /dev/null +++ b/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj @@ -0,0 +1,20 @@ + + + + Exe + net8.0 + enable + enable + true + + + + + + + + + + + + diff --git a/src/Aspire/Aspire.AppHost/Program.cs b/src/Aspire/Aspire.AppHost/Program.cs new file mode 100644 index 00000000000..183c62e4166 --- /dev/null +++ b/src/Aspire/Aspire.AppHost/Program.cs @@ -0,0 +1,5 @@ +var builder = DistributedApplication.CreateBuilder(args); + +builder.AddProject("aspire.orchardcore.cms.web"); + +builder.Build().Run(); diff --git a/src/Aspire/Aspire.AppHost/Properties/launchSettings.json b/src/Aspire/Aspire.AppHost/Properties/launchSettings.json new file mode 100644 index 00000000000..6296f010cc7 --- /dev/null +++ b/src/Aspire/Aspire.AppHost/Properties/launchSettings.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15139", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:16125" + } + } + } +} diff --git a/src/Aspire/Aspire.AppHost/appsettings.Development.json b/src/Aspire/Aspire.AppHost/appsettings.Development.json new file mode 100644 index 00000000000..0c208ae9181 --- /dev/null +++ b/src/Aspire/Aspire.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/Aspire/Aspire.AppHost/appsettings.json b/src/Aspire/Aspire.AppHost/appsettings.json new file mode 100644 index 00000000000..31c092aa450 --- /dev/null +++ b/src/Aspire/Aspire.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj new file mode 100644 index 00000000000..b5953877158 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj @@ -0,0 +1,32 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + PreserveNewest + true + PreserveNewest + + + PreserveNewest + true + PreserveNewest + + + + + + + + diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder b/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder new file mode 100644 index 00000000000..95c193c13ef --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder @@ -0,0 +1 @@ +# This file is used to ensure the Localization folder is created during deployment diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/NLog.config b/src/Aspire/Aspire.OrchardCore.Cms.Web/NLog.config new file mode 100644 index 00000000000..8d4eef2d62b --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/NLog.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs b/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs new file mode 100644 index 00000000000..10fa0823edb --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs @@ -0,0 +1,24 @@ +using OrchardCore.Logging; + +var builder = WebApplication.CreateBuilder(args); + +builder.Host.UseNLogHost(); +builder.AddServiceDefaults(); + +builder.Services + .AddOrchardCms() + .AddSetupFeatures("OrchardCore.AutoSetup"); + +var app = builder.Build(); + +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); +} + +app.UseStaticFiles(); + +app.UseOrchardCore(); + + +await app.RunAsync(); diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Properties/launchSettings.json b/src/Aspire/Aspire.OrchardCore.Cms.Web/Properties/launchSettings.json new file mode 100644 index 00000000000..448ea2ff178 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:23843", + "sslPort": 44303 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5084", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7179;http://localhost:5084", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.Development.json b/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.Development.json new file mode 100644 index 00000000000..0c208ae9181 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json b/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json new file mode 100644 index 00000000000..56b30baa599 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj b/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj new file mode 100644 index 00000000000..00e0d1f1f92 --- /dev/null +++ b/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj @@ -0,0 +1,24 @@ + + + + Library + net8.0 + enable + enable + true + + + + + + + + + + + + + + + + diff --git a/src/Aspire/Aspire.ServiceDefaults/Extensions.cs b/src/Aspire/Aspire.ServiceDefaults/Extensions.cs new file mode 100644 index 00000000000..c59308d50da --- /dev/null +++ b/src/Aspire/Aspire.ServiceDefaults/Extensions.cs @@ -0,0 +1,119 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Logging; +using OpenTelemetry.Logs; +using OpenTelemetry.Metrics; +using OpenTelemetry.Trace; + +namespace Microsoft.Extensions.Hosting; + +public static class Extensions +{ + public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder) + { + builder.ConfigureOpenTelemetry(); + + builder.AddDefaultHealthChecks(); + + builder.Services.AddServiceDiscovery(); + + builder.Services.ConfigureHttpClientDefaults(http => + { + // Turn on resilience by default + http.AddStandardResilienceHandler(); + + // Turn on service discovery by default + http.UseServiceDiscovery(); + }); + + return builder; + } + + public static IHostApplicationBuilder ConfigureOpenTelemetry(this IHostApplicationBuilder builder) + { + builder.Logging.AddOpenTelemetry(logging => + { + logging.IncludeFormattedMessage = true; + logging.IncludeScopes = true; + }); + + builder.Services.AddOpenTelemetry() + .WithMetrics(metrics => + { + metrics.AddRuntimeInstrumentation() + .AddBuiltInMeters(); + }) + .WithTracing(tracing => + { + if (builder.Environment.IsDevelopment()) + { + // We want to view all traces in development + tracing.SetSampler(new AlwaysOnSampler()); + } + + tracing.AddAspNetCoreInstrumentation() + .AddGrpcClientInstrumentation() + .AddHttpClientInstrumentation(); + }); + + builder.AddOpenTelemetryExporters(); + + return builder; + } + + private static IHostApplicationBuilder AddOpenTelemetryExporters(this IHostApplicationBuilder builder) + { + var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); + + if (useOtlpExporter) + { + builder.Services.Configure(logging => logging.AddOtlpExporter()); + builder.Services.ConfigureOpenTelemetryMeterProvider(metrics => metrics.AddOtlpExporter()); + builder.Services.ConfigureOpenTelemetryTracerProvider(tracing => tracing.AddOtlpExporter()); + } + + // Uncomment the following lines to enable the Prometheus exporter (requires the OpenTelemetry.Exporter.Prometheus.AspNetCore package) + // builder.Services.AddOpenTelemetry() + // .WithMetrics(metrics => metrics.AddPrometheusExporter()); + + // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.Exporter package) + // builder.Services.AddOpenTelemetry() + // .UseAzureMonitor(); + + return builder; + } + + public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder) + { + builder.Services.AddHealthChecks() + // Add a default liveness check to ensure app is responsive + .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); + + return builder; + } + + public static WebApplication MapDefaultEndpoints(this WebApplication app) + { + // Uncomment the following line to enable the Prometheus endpoint (requires the OpenTelemetry.Exporter.Prometheus.AspNetCore package) + // app.MapPrometheusScrapingEndpoint(); + + // All health checks must pass for app to be considered ready to accept traffic after starting + app.MapHealthChecks("/health"); + + // Only health checks tagged with the "live" tag must pass for app to be considered alive + app.MapHealthChecks("/alive", new HealthCheckOptions + { + Predicate = r => r.Tags.Contains("live") + }); + + return app; + } + + private static MeterProviderBuilder AddBuiltInMeters(this MeterProviderBuilder meterProviderBuilder) => + meterProviderBuilder.AddMeter( + "Microsoft.AspNetCore.Hosting", + "Microsoft.AspNetCore.Server.Kestrel", + "System.Net.Http"); +} diff --git a/src/OrchardCore.Cms.Web/Program.cs b/src/OrchardCore.Cms.Web/Program.cs index 4b4d39392bd..f5e06716d21 100644 --- a/src/OrchardCore.Cms.Web/Program.cs +++ b/src/OrchardCore.Cms.Web/Program.cs @@ -19,4 +19,4 @@ app.UseOrchardCore(); -app.Run(); +await app.RunAsync(); diff --git a/src/OrchardCore.Mvc.Web/Program.cs b/src/OrchardCore.Mvc.Web/Program.cs index d93a0dc32b3..785623cd759 100644 --- a/src/OrchardCore.Mvc.Web/Program.cs +++ b/src/OrchardCore.Mvc.Web/Program.cs @@ -15,4 +15,4 @@ app.UseOrchardCore(); -app.Run(); +await app.RunAsync(); From f3414d12fb423a8de81432f6b70f4b04c418967b Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 14:59:40 -0800 Subject: [PATCH 2/9] Finish setting up Aspire correctly. Launch MVC and CMS app --- OrchardCore.sln | 9 +++- .../Aspire.AppHost/Aspire.AppHost.csproj | 2 +- src/Aspire/Aspire.AppHost/Program.cs | 4 +- .../Aspire.OrchardCore.Cms.Web.csproj | 27 ++--------- .../Localization/.placeholder | 1 + .../Aspire.OrchardCore.Mvc.Web.csproj | 19 ++++++++ .../Models/ErrorViewModel.cs | 8 ++++ .../Aspire.OrchardCore.Mvc.Web/Program.cs | 20 ++++++++ .../Properties/launchSettings.json | 38 +++++++++++++++ .../Views/Shared/_Layout.cshtml | 46 +++++++++++++++++++ .../Views}/_ViewImports.cshtml | 0 .../Views}/_ViewStart.cshtml | 0 .../appsettings.Development.json | 8 ++++ .../appsettings.json | 10 ++++ .../Aspire.ServiceDefaults.csproj | 5 +- src/Aspire/Directory.Build.props | 13 ++++++ .../OrchardCore.Mvc.HelloWorld.csproj | 16 +++++++ .../Views/_ViewImports.cshtml | 1 + .../Views/_ViewStart.cshtml | 3 ++ .../Views/_ViewImports.cshtml | 1 + .../Views/_ViewStart.cshtml | 3 ++ 21 files changed, 207 insertions(+), 27 deletions(-) create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/Aspire.OrchardCore.Mvc.Web.csproj create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/Models/ErrorViewModel.cs create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/Program.cs create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/Properties/launchSettings.json create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/Shared/_Layout.cshtml rename src/{OrchardCore.Mvc.Web => Aspire/Aspire.OrchardCore.Mvc.Web/Views}/_ViewImports.cshtml (100%) rename src/{OrchardCore.Mvc.Web => Aspire/Aspire.OrchardCore.Mvc.Web/Views}/_ViewStart.cshtml (100%) create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.Development.json create mode 100644 src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.json create mode 100644 src/Aspire/Directory.Build.props create mode 100644 src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewImports.cshtml create mode 100644 src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewStart.cshtml create mode 100644 src/OrchardCore.Mvc.Web/Views/_ViewImports.cshtml create mode 100644 src/OrchardCore.Mvc.Web/Views/_ViewStart.cshtml diff --git a/OrchardCore.sln b/OrchardCore.sln index c0ec2ad4d9a..6378b8ad6ef 100644 --- a/OrchardCore.sln +++ b/OrchardCore.sln @@ -507,7 +507,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Sms", "src\Orch EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Sms.Core", "src\OrchardCore\OrchardCore.Sms.Core\OrchardCore.Sms.Core.csproj", "{20356393-B16D-466C-8203-877A534E287D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.AppHost", "src\Aspire\Aspire.AppHost\Aspire.AppHost.csproj", "{B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.AppHost", "src\Aspire\Aspire.AppHost\Aspire.AppHost.csproj", "{B8A5D532-1F7D-40ED-B6B0-BE36C8B81D91}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.ServiceDefaults", "src\Aspire\Aspire.ServiceDefaults\Aspire.ServiceDefaults.csproj", "{C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF}" EndProject @@ -515,6 +515,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Aspire", "Aspire", "{5DC4B8 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.OrchardCore.Cms.Web", "src\Aspire\Aspire.OrchardCore.Cms.Web\Aspire.OrchardCore.Cms.Web.csproj", "{3DE87BB4-BA03-4C02-861F-6EE51898E682}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.OrchardCore.Mvc.Web", "src\Aspire\Aspire.OrchardCore.Mvc.Web\Aspire.OrchardCore.Mvc.Web.csproj", "{59D2CC21-A422-42D5-8118-C16B7EE52F77}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1355,6 +1357,10 @@ Global {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Debug|Any CPU.Build.0 = Debug|Any CPU {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DE87BB4-BA03-4C02-861F-6EE51898E682}.Release|Any CPU.Build.0 = Release|Any CPU + {59D2CC21-A422-42D5-8118-C16B7EE52F77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59D2CC21-A422-42D5-8118-C16B7EE52F77}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59D2CC21-A422-42D5-8118-C16B7EE52F77}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59D2CC21-A422-42D5-8118-C16B7EE52F77}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1590,6 +1596,7 @@ Global {C2BB6BBB-4F5F-4D2F-975D-D50DD38FCABF} = {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} = {275E087F-A4E2-4A7B-A924-ED68E3A52086} {3DE87BB4-BA03-4C02-861F-6EE51898E682} = {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} + {59D2CC21-A422-42D5-8118-C16B7EE52F77} = {5DC4B8E4-9BE0-4B57-8065-7DC0A44DBD20} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {46A1D25A-78D1-4476-9CBF-25B75E296341} diff --git a/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj b/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj index c2b82d89371..474895e39a8 100644 --- a/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj +++ b/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj @@ -2,7 +2,6 @@ Exe - net8.0 enable enable true @@ -14,6 +13,7 @@ + diff --git a/src/Aspire/Aspire.AppHost/Program.cs b/src/Aspire/Aspire.AppHost/Program.cs index 183c62e4166..00ca318701a 100644 --- a/src/Aspire/Aspire.AppHost/Program.cs +++ b/src/Aspire/Aspire.AppHost/Program.cs @@ -1,5 +1,7 @@ var builder = DistributedApplication.CreateBuilder(args); -builder.AddProject("aspire.orchardcore.cms.web"); +builder.AddProject("OrchardCore CMS App"); + +builder.AddProject("OrchardCore MVC App"); builder.Build().Run(); diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj index b5953877158..5396a806640 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj @@ -1,32 +1,15 @@ - - net8.0 - enable - enable - - - - - PreserveNewest - true - PreserveNewest - - - PreserveNewest - true - PreserveNewest - - - - - - + + + + + diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder b/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder index 95c193c13ef..24475f911be 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder @@ -1 +1,2 @@ # This file is used to ensure the Localization folder is created during deployment +- \ No newline at end of file diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/Aspire.OrchardCore.Mvc.Web.csproj b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Aspire.OrchardCore.Mvc.Web.csproj new file mode 100644 index 00000000000..7a46d082b87 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Aspire.OrchardCore.Mvc.Web.csproj @@ -0,0 +1,19 @@ + + + + enable + enable + + + + + + + + + + + + + + diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/Models/ErrorViewModel.cs b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Models/ErrorViewModel.cs new file mode 100644 index 00000000000..41677d219d4 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Models/ErrorViewModel.cs @@ -0,0 +1,8 @@ +namespace Aspire.OrchardCore.Mvc.Web.Models; + +public class ErrorViewModel +{ + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); +} diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/Program.cs b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Program.cs new file mode 100644 index 00000000000..10957c770d8 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Program.cs @@ -0,0 +1,20 @@ +var builder = WebApplication.CreateBuilder(args); + +builder.AddServiceDefaults(); + +builder.Services + .AddOrchardCore() + .AddMvc(); + +var app = builder.Build(); + +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); +} + +app.UseStaticFiles(); + +app.UseOrchardCore(); + +await app.RunAsync(); diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/Properties/launchSettings.json b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Properties/launchSettings.json new file mode 100644 index 00000000000..f47de3dde58 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:41929", + "sslPort": 44395 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5287", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7244;http://localhost:5287", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/Shared/_Layout.cshtml b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/Shared/_Layout.cshtml new file mode 100644 index 00000000000..d550057bd4a --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/Shared/_Layout.cshtml @@ -0,0 +1,46 @@ + + + + + + @ViewData["Title"] - MvcSandbox + + + + + +
+ @RenderBody() +
+
+

© 2015 - MvcSandbox

+
+
+ + + + + @RenderSection("scripts", required: false) + + diff --git a/src/OrchardCore.Mvc.Web/_ViewImports.cshtml b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/_ViewImports.cshtml similarity index 100% rename from src/OrchardCore.Mvc.Web/_ViewImports.cshtml rename to src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/_ViewImports.cshtml diff --git a/src/OrchardCore.Mvc.Web/_ViewStart.cshtml b/src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/_ViewStart.cshtml similarity index 100% rename from src/OrchardCore.Mvc.Web/_ViewStart.cshtml rename to src/Aspire/Aspire.OrchardCore.Mvc.Web/Views/_ViewStart.cshtml diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.Development.json b/src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.Development.json new file mode 100644 index 00000000000..0c208ae9181 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.json b/src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.json new file mode 100644 index 00000000000..9c0b05b1642 --- /dev/null +++ b/src/Aspire/Aspire.OrchardCore.Mvc.Web/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Sample": "Sample Value" +} diff --git a/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj b/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj index 00e0d1f1f92..52455379fbd 100644 --- a/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj +++ b/src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj @@ -2,7 +2,6 @@ Library - net8.0 enable enable true @@ -10,7 +9,9 @@ - + + + diff --git a/src/Aspire/Directory.Build.props b/src/Aspire/Directory.Build.props new file mode 100644 index 00000000000..f3bfda75567 --- /dev/null +++ b/src/Aspire/Directory.Build.props @@ -0,0 +1,13 @@ + + + + + net8.0 + enable + False + False + false + 612,618 + + + \ No newline at end of file diff --git a/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/OrchardCore.Mvc.HelloWorld.csproj b/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/OrchardCore.Mvc.HelloWorld.csproj index c3c14a820a3..17cfec99d09 100644 --- a/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/OrchardCore.Mvc.HelloWorld.csproj +++ b/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/OrchardCore.Mvc.HelloWorld.csproj @@ -10,6 +10,22 @@ $(PackageTags) OrchardCoreFramework + + + + + + + + true + PreserveNewest + + + true + PreserveNewest + + + diff --git a/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewImports.cshtml b/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewImports.cshtml new file mode 100644 index 00000000000..a757b413b92 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewImports.cshtml @@ -0,0 +1 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewStart.cshtml b/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewStart.cshtml new file mode 100644 index 00000000000..2de62418c07 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/_Layout.cshtml"; +} diff --git a/src/OrchardCore.Mvc.Web/Views/_ViewImports.cshtml b/src/OrchardCore.Mvc.Web/Views/_ViewImports.cshtml new file mode 100644 index 00000000000..a757b413b92 --- /dev/null +++ b/src/OrchardCore.Mvc.Web/Views/_ViewImports.cshtml @@ -0,0 +1 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/src/OrchardCore.Mvc.Web/Views/_ViewStart.cshtml b/src/OrchardCore.Mvc.Web/Views/_ViewStart.cshtml new file mode 100644 index 00000000000..2de62418c07 --- /dev/null +++ b/src/OrchardCore.Mvc.Web/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/_Layout.cshtml"; +} From f6ad14b543274231c865eff410157edbe5a147ba Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 15:05:41 -0800 Subject: [PATCH 3/9] update action --- .github/workflows/pr_ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 7dcde8681af..3adb64790ae 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -24,6 +24,9 @@ jobs: - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' + - name: Setup Aspire + run: | + dotnet workload install aspire - name: Build run: | dotnet build -c Release From 2a11d934618fb335b3637c6b15ee9af618816b60 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 15:15:14 -0800 Subject: [PATCH 4/9] update actions --- .github/workflows/pr_ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 3adb64790ae..56407525679 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -24,6 +24,9 @@ jobs: - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' + - name: Update Workload + run: | + dotnet workload update - name: Setup Aspire run: | dotnet workload install aspire From 9e6e639e66de2f8ea249a3846c24d4189ab39f29 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 15:18:57 -0800 Subject: [PATCH 5/9] update action --- .github/workflows/pr_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 56407525679..16475f30a9d 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -26,7 +26,7 @@ jobs: dotnet-version: '8.0.x' - name: Update Workload run: | - dotnet workload update + dotnet workload update --from-previous-sdk - name: Setup Aspire run: | dotnet workload install aspire From 1b84a91cf372edf297e1a8471807f6973fd62dfa Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 15:27:06 -0800 Subject: [PATCH 6/9] update actions --- .github/workflows/pr_ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 16475f30a9d..f4a73872426 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -24,6 +24,7 @@ jobs: - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' + dotnet-quality: 'manifests' - name: Update Workload run: | dotnet workload update --from-previous-sdk From d32d5b961707fd9ce1e2979c97e6d7174dcfecc5 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 15:29:01 -0800 Subject: [PATCH 7/9] Use preview --- .github/workflows/pr_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index f4a73872426..19a2d28215d 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' - dotnet-quality: 'manifests' + dotnet-quality: 'preview' - name: Update Workload run: | dotnet workload update --from-previous-sdk From 724fa79dcd6b81f3e6592f955282881116b1fa76 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 15:52:37 -0800 Subject: [PATCH 8/9] cleanup --- .../Aspire.OrchardCore.Cms.Web.csproj | 5 +++++ .../Aspire.OrchardCore.Cms.Web/Localization/.placeholder | 1 - src/Aspire/Directory.Build.props | 2 +- src/OrchardCore.Cms.Web/wwwroot/.placeholder | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj index 5396a806640..7410b088380 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj @@ -6,6 +6,11 @@ + + + + + diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder b/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder index 24475f911be..95c193c13ef 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Localization/.placeholder @@ -1,2 +1 @@ # This file is used to ensure the Localization folder is created during deployment -- \ No newline at end of file diff --git a/src/Aspire/Directory.Build.props b/src/Aspire/Directory.Build.props index f3bfda75567..77240662b47 100644 --- a/src/Aspire/Directory.Build.props +++ b/src/Aspire/Directory.Build.props @@ -10,4 +10,4 @@ 612,618
- \ No newline at end of file + diff --git a/src/OrchardCore.Cms.Web/wwwroot/.placeholder b/src/OrchardCore.Cms.Web/wwwroot/.placeholder index 46b134b197f..8b137891791 100644 --- a/src/OrchardCore.Cms.Web/wwwroot/.placeholder +++ b/src/OrchardCore.Cms.Web/wwwroot/.placeholder @@ -1 +1 @@ -ÿþ \ No newline at end of file + From f46030b08d7bff5de83ac3afdc327a8bf5625b7b Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 27 Dec 2023 16:53:16 -0800 Subject: [PATCH 9/9] Adding Redis container --- .../Aspire.AppHost/Aspire.AppHost.csproj | 1 + src/Aspire/Aspire.AppHost/Program.cs | 7 +++++-- .../Aspire.OrchardCore.Cms.Web.csproj | 1 + .../Aspire.OrchardCore.Cms.Web/Program.cs | 21 +++++++++++++++++-- .../appsettings.json | 9 ++++++++ src/README.md | 5 +++++ 6 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj b/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj index 474895e39a8..5f4dcd6bb78 100644 --- a/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj +++ b/src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj @@ -9,6 +9,7 @@ + diff --git a/src/Aspire/Aspire.AppHost/Program.cs b/src/Aspire/Aspire.AppHost/Program.cs index 00ca318701a..e0f47e57d24 100644 --- a/src/Aspire/Aspire.AppHost/Program.cs +++ b/src/Aspire/Aspire.AppHost/Program.cs @@ -1,7 +1,10 @@ var builder = DistributedApplication.CreateBuilder(args); -builder.AddProject("OrchardCore CMS App"); +var redis = builder.AddRedisContainer("Redis", 50963); + +builder.AddProject("OrchardCore CMS App") + .WithReference(redis); builder.AddProject("OrchardCore MVC App"); -builder.Build().Run(); +await builder.Build().RunAsync(); diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj index 7410b088380..dc7cff0639c 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Aspire.OrchardCore.Cms.Web.csproj @@ -3,6 +3,7 @@ + diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs b/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs index 10fa0823edb..772eb0500ad 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/Program.cs @@ -5,10 +5,28 @@ builder.Host.UseNLogHost(); builder.AddServiceDefaults(); -builder.Services +var ocBuilder = builder.Services .AddOrchardCms() .AddSetupFeatures("OrchardCore.AutoSetup"); +if (builder.Configuration.GetValue("EnableAzureCoreFeatures")) +{ + // Enable Azure based resources to store the shell configs and the data protections. + ocBuilder.AddAzureShellsConfiguration() + .AddGlobalFeatures("OrchardCore.DataProtection.Azure"); +} + +if (builder.Configuration.GetValue("EnableRedisCache")) +{ + ocBuilder.AddSetupFeatures("OrchardCore.Redis", "OrchardCore.Redis.Lock") + .AddGlobalFeatures("OrchardCore.Redis", "OrchardCore.Redis.Cache", "OrchardCore.Redis.DataProtection", "OrchardCore.Redis.Lock"); +} + +if (builder.Configuration.GetValue("EnableAzureStorage")) +{ + ocBuilder.AddTenantFeatures("OrchardCore.Media.Azure.Storage"); +} + var app = builder.Build(); if (!app.Environment.IsDevelopment()) @@ -20,5 +38,4 @@ app.UseOrchardCore(); - await app.RunAsync(); diff --git a/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json b/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json index 56b30baa599..261a52e72a6 100644 --- a/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json +++ b/src/Aspire/Aspire.OrchardCore.Cms.Web/appsettings.json @@ -4,5 +4,14 @@ "Default": "Warning", "Microsoft.Hosting.Lifetime": "Information" } + }, + "EnableAzureCoreFeatures": false, + "EnableAzureStorage": false, + "EnableRedisCache": true, + "OrchardCore": { + "OrchardCore_Redis": { + "Configuration": "127.0.0.1:50963,allowAdmin=true", + "InstancePrefix": "" + } } } diff --git a/src/README.md b/src/README.md index 3ed1af5ba48..6fe54b95e1d 100644 --- a/src/README.md +++ b/src/README.md @@ -104,6 +104,11 @@ For more details on the various development tools we recommend for using with Or Docker images and parameters can be found at +### .NET Aspire + +The configuration of the OrchardCore solution is tailored for execution within the Aspire project. To initiate the Aspire project rather than the CMS directly, designate the `Aspire.AppHost` project as the startup project of the solution, then launch it. To run the Aspire project, [install .NET Aspire](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/setup-tooling?tabs=visual-studio) on your local machine. Ensure you have Docker Desktop installed, and you are using Visual Studio version 17.9.0 or later + + ## Showcasing Orchard Core CMS