From db9d54f8f322342f3a28bca844dfac5f9ab3d5f9 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 14:26:08 +0000 Subject: [PATCH 1/2] Upgrade Stencil AdvancedSearch sample to .NET 8 - Bump TFM to net8.0 - Bump EF Core (Sqlite, SqlServer) and Microsoft.Data.Sqlite.Core to 8.0.26 - Replace VueCliMiddleware with Microsoft.AspNetCore.SpaProxy 8.0.26 + add SpaProxyServerUrl/SpaProxyLaunchCommand MSBuild properties - Remove Microsoft.AspNetCore.SpaServices.Extensions - Remove legacy System.Data.SqlClient, System.Net.Http, System.Text.RegularExpressions, System.Drawing.Common - Bump Microsoft.Data.SqlClient to 5.2.3 - Bump Microsoft.IdentityModel.JsonWebTokens and System.IdentityModel.Tokens.Jwt to 7.7.1 - Drop AddSpaStaticFiles/UseSpaStaticFiles/UseSpa from Startup.cs - Drop unused 'using System.Data.SqlClient;' Co-Authored-By: Toby Drinkall --- ...mo.AspNetCoreStencil.AdvancedSearch.csproj | 141 +++++++++--------- AspNetCore/Stencil/AdvancedSearch/Startup.cs | 17 --- 2 files changed, 69 insertions(+), 89 deletions(-) diff --git a/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj b/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj index 8ea48d12..b3301dcf 100644 --- a/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj +++ b/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj @@ -1,72 +1,69 @@ - - - net6.0 - true - Latest - false - ClientApp\ - $(DefaultItemExcludes);$(SpaRoot)node_modules\** - EqDemo.AspNetCoreStencil.AdvancedSearch - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %(DistFiles.Identity) - PreserveNewest - true - - - - \ No newline at end of file + + + net8.0 + true + Latest + false + ClientApp\ + http://localhost:4444 + npm start + $(DefaultItemExcludes);$(SpaRoot)node_modules\** + EqDemo.AspNetCoreStencil.AdvancedSearch + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %(DistFiles.Identity) + PreserveNewest + true + + + + diff --git a/AspNetCore/Stencil/AdvancedSearch/Startup.cs b/AspNetCore/Stencil/AdvancedSearch/Startup.cs index 3cf95eb8..79d09a07 100644 --- a/AspNetCore/Stencil/AdvancedSearch/Startup.cs +++ b/AspNetCore/Stencil/AdvancedSearch/Startup.cs @@ -1,5 +1,3 @@ -using System.Data.SqlClient; - using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -51,11 +49,6 @@ public void ConfigureServices(IServiceCollection services) // .RegisterDbGate(); // .RegisterDbGate(); - services.AddSpaStaticFiles(configuration => - { - configuration.RootPath = "ClientApp/www"; - }); - //to support non-Unicode code pages in PDF Exporter System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); } @@ -76,7 +69,6 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseHttpsRedirection(); app.UseStaticFiles(); - app.UseSpaStaticFiles(); app.UseCors("AllowAllPolicy"); @@ -110,15 +102,6 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) pattern: "{controller}/{action=Index}/{id?}"); }); - app.UseSpa(spa => - { - spa.Options.SourcePath = "ClientApp"; - - if (env.IsDevelopment()) { - spa.UseProxyToSpaDevelopmentServer("http://localhost:4444/"); - } - }); - //Init demo database (if necessary) app.EnsureDbInitialized(Configuration, env); } From 6f50af3df36cfb1094d01e45dbb2840ea00debf6 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 14:31:49 +0000 Subject: [PATCH 2/2] Restore SPA production fallback after SpaProxy migration - Add endpoints.MapFallbackToFile("index.html") so SPA client-side routes fall back to index.html in production (matches the .NET 8 SpaProxy pattern used in the sibling Angular sample at AspNetCore/Angular/AdvancedSearch/Program.cs). - Fix PublishRunWebpack target to copy Stencil's actual build output ($(SpaRoot)www\**, per stencil.config.ts outputTargets) into wwwroot on publish so app.UseStaticFiles() can serve the prebuilt assets in production. Prior path ($(SpaRoot)build\**) did not match Stencil's output and would have left wwwroot empty. Co-Authored-By: Toby Drinkall --- .../EqDemo.AspNetCoreStencil.AdvancedSearch.csproj | 6 +++--- AspNetCore/Stencil/AdvancedSearch/Startup.cs | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj b/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj index b3301dcf..53432bba 100644 --- a/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj +++ b/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj @@ -56,11 +56,11 @@ - + - + - %(DistFiles.Identity) + wwwroot\%(RecursiveDir)%(FileName)%(Extension) PreserveNewest true diff --git a/AspNetCore/Stencil/AdvancedSearch/Startup.cs b/AspNetCore/Stencil/AdvancedSearch/Startup.cs index 79d09a07..872bf82d 100644 --- a/AspNetCore/Stencil/AdvancedSearch/Startup.cs +++ b/AspNetCore/Stencil/AdvancedSearch/Startup.cs @@ -100,6 +100,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action=Index}/{id?}"); + + endpoints.MapFallbackToFile("index.html"); }); //Init demo database (if necessary)