diff --git a/.autover/changes/fix-static-assets-non-production-env.json b/.autover/changes/fix-static-assets-non-production-env.json new file mode 100644 index 000000000..60de53a47 --- /dev/null +++ b/.autover/changes/fix-static-assets-non-production-env.json @@ -0,0 +1,11 @@ +{ + "Projects": [ + { + "Name": "Amazon.Lambda.TestTool", + "Type": "Patch", + "ChangelogMessages": [ + "Fixed static assets (CSS, JS, BlazorMonaco) failing to load when ASPNETCORE_ENVIRONMENT or DOTNET_ENVIRONMENT is set to a non-Production value by always serving static files from the tool's install directory." + ] + } + ] +} diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Amazon.Lambda.TestTool.csproj b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Amazon.Lambda.TestTool.csproj index 9711bce5d..af6077d95 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Amazon.Lambda.TestTool.csproj +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Amazon.Lambda.TestTool.csproj @@ -75,4 +75,13 @@ + + + + + + PreserveNewest + + + diff --git a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Processes/TestToolProcess.cs b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Processes/TestToolProcess.cs index 61a0a8aa5..5da9d349b 100644 --- a/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Processes/TestToolProcess.cs +++ b/Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/Processes/TestToolProcess.cs @@ -60,10 +60,8 @@ public static TestToolProcess Startup(RunCommandSettings settings, CancellationT builder.Services.AddHttpContextAccessor(); var wwwrootPath = Path.Combine(AppContext.BaseDirectory, "wwwroot"); - if (builder.Environment.IsProduction()) - { - builder.Services.AddSingleton(new PhysicalFileProvider(wwwrootPath)); - } + var wwwrootFileProvider = new PhysicalFileProvider(wwwrootPath); + builder.Services.AddSingleton(wwwrootFileProvider); builder.Services.AddSingleton(); var serviceHttp = $"http://{settings.LambdaEmulatorHost}:{settings.LambdaEmulatorPort}"; @@ -87,20 +85,21 @@ public static TestToolProcess Startup(RunCommandSettings settings, CancellationT var app = builder.Build(); - if (app.Environment.IsProduction()) - { - app.UseStaticFiles(new StaticFileOptions - { - FileProvider = new PhysicalFileProvider(wwwrootPath) - }); - } - else + if (!app.Environment.IsProduction()) { // nosemgrep: csharp.lang.security.stacktrace-disclosure.stacktrace-disclosure app.UseDeveloperExceptionPage(); - app.UseStaticFiles(); } + // Always use the explicit file provider to serve static files from the tool's install + // directory. Without this, non-Production environments attempt to use the static web + // assets manifest which contains absolute paths from the build machine and will fail + // when running as an installed global tool on a different machine. + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = wwwrootFileProvider + }); + app.UseAntiforgery(); app.MapRazorComponents()