aspnetcore: ASP.NET Core hosted Blazor app fails to run in Docker
Repro steps:
- Create a new Blazor (ASP.NET Core hosted) app with the Preview 4 bits
- Build and run - it works
- Right click, Add Docker support (Linux)
- Build and run on Docker Linux
Actual result:
Unhandled Exception: System.ArgumentException: The directory name is invalid.
Parameter name: path
at System.IO.FileSystemWatcher.CheckPathValidity(String path)
at System.IO.FileSystemWatcher..ctor(String path)
at Microsoft.AspNetCore.Builder.AutoRebuildExtensions.WatchFileSystem(BlazorConfig config, Action onWrite)
at Microsoft.AspNetCore.Builder.BlazorApplicationBuilderExtensions.UseBlazor(IApplicationBuilder app, BlazorOptions options)
at BlazorDocker.Server.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\Users\daroth\Source\Repos\BlazorDocker\BlazorDocker.Server\Startup.cs:line 43
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Hosting.Internal.ConventionBasedStartup.Configure(IApplicationBuilder app)
at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.StartAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
at BlazorDocker.Server.Program.Main(String[] args) in C:\Users\daroth\Source\Repos\BlazorDocker\BlazorDocker.Server\Program.cs:line 11
More repro steps:
- Disable Blazor auto-build by adding
<BlazorRebuildOnFileChange>false</BlazorRebuildOnFileChange>to the client project file. - Build and run the app
Actual result:
Unhandled Exception: System.ArgumentException: The path must be absolute.
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
Parameter name: root
at Microsoft.AspNetCore.Builder.BlazorApplicationBuilderExtensions.UseBlazor(IApplicationBuilder app, BlazorOptions options)
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
at BlazorDocker.Server.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\Users\daroth\Source\Repos\BlazorDocker\BlazorDocker.Server\Startup.cs:line 43
at Microsoft.AspNetCore.Builder.BlazorApplicationBuilderExtensions.UseBlazor(IApplicationBuilder app, BlazorOptions options)
--- End of stack trace from previous location where exception was thrown ---
at BlazorDocker.Server.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\Users\daroth\Source\Repos\BlazorDocker\BlazorDocker.Server\Startup.cs:line 43
at Microsoft.AspNetCore.Hosting.Internal.ConventionBasedStartup.Configure(IApplicationBuilder app)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
at Microsoft.AspNetCore.Hosting.Internal.ConventionBasedStartup.Configure(IApplicationBuilder app)
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
[41m[1m[37mcrit[39m[22m[49m: Microsoft.AspNetCore.Hosting.Internal.WebHost[6]
at Microsoft.AspNetCore.Hosting.Internal.WebHost.StartAsync(CancellationToken cancellationToken)
Application startup exception
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
System.ArgumentException: The path must be absolute.
Parameter name: root
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token)
at Microsoft.AspNetCore.Builder.BlazorApplicationBuilderExtensions.UseBlazor(IApplicationBuilder app, BlazorOptions options)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
at BlazorDocker.Server.Program.Main(String[] args) in C:\Users\daroth\Source\Repos\BlazorDocker\BlazorDocker.Server\Program.cs:line 11
at BlazorDocker.Server.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\Users\daroth\Source\Repos\BlazorDocker\BlazorDocker.Server\Startup.cs:line 43
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Hosting.Internal.ConventionBasedStartup.Configure(IApplicationBuilder app)
at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 19 (6 by maintainers)
This will be fixed soon.
@RealTadango In my case, this was happening because we were calling “UseContentRoot” in a way that could cause it to be something other than the location of our assembly. Changing it to:
seems to help.
There is an issue with Preview6 now:
Unhandled Exception: System.ArgumentException: The path must be absolute. Parameter name: root at Microsoft.Extensions.FileProviders.PhysicalFileProvider…ctor(String root, ExclusionFilters filters) at Microsoft.Extensions.FileProviders.PhysicalFileProvider…ctor(String root) at Microsoft.AspNetCore.Builder.BlazorHostingEndpointRouteBuilderExtensions.MapFallbackToClientSideBlazor(IEndpointRouteBuilder endpoints, String clientAssemblyFilePath, String pattern, String filePath) at Microsoft.AspNetCore.Builder.BlazorHostingEndpointRouteBuilderExtensions.MapFallbackToClientSideBlazor[TClientApp](IEndpointRouteBuilder endpoints, String pattern, String filePath) at Favorites.Server.Startup.<>c.<Configure>b__4_0(IEndpointRouteBuilder endpoints) in C:\Users\Herman\Source\Workspaces\Default\Favorites\Favorites.Server\Startup.cs:line 72 at Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions.UseEndpoints(IApplicationBuilder builder, Action`1 configure) at Favorites.Server.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\Users\Herman\Source\Workspaces\Default\Favorites\Favorites.Server\Startup.cs:line 73 at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.Internal.ConventionBasedStartup.Configure(IApplicationBuilder app) at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app) at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() at Microsoft.AspNetCore.Hosting.Internal.WebHost.StartAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage) at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage) at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token) at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
The fix is available in the public preview version of visual studio and will be generally available in the next update.
Closing this as there’s no need for further action.