You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5升级.NET 6后Azure部署wwwroot路径错误求助

问题描述

将Web应用从.NET 5升级至.NET 6,部署到Azure后出现wwwroot文件夹找不到的问题,异常信息显示的是开发环境的路径。在.NET 5中该路径会被动态处理为当前文件夹,尝试多种方法均无效,求助遗漏了什么以及修复方案。

异常信息

System.IO.DirectoryNotFoundException: C:\vsts\rs_source\Lakemedelshantering\LakemedelshanteringApi\LakemedelshanteringApi\wwwroot
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root)
at Microsoft.AspNetCore.Hosting.StaticWebAssets.StaticWebAssetsLoader.<>c.b__1_0(String contentRoot)
at Microsoft.AspNetCore.StaticWebAssets.ManifestStaticWebAssetFileProvider..ctor(StaticWebAssetManifest manifest, Func`2 fileProviderFactory)
at Microsoft.AspNetCore.Hosting.StaticWebAssets.StaticWebAssetsLoader.UseStaticWebAssetsCore(IWebHostEnvironment environment, Stream manifest)
at Microsoft.AspNetCore.Hosting.StaticWebAssets.StaticWebAssetsLoader.UseStaticWebAssets(IWebHostEnvironment environment, IConfiguration configuration)
at Microsoft.AspNetCore.WebHost.<>c.b__9_0(WebHostBuilderContext ctx, IConfigurationBuilder cb)
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass9_0.b__0(HostBuilderContext context, IConfigurationBuilder builder)
at Microsoft.Extensions.Hosting.HostBuilder.BuildAppConfiguration()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at LakemedelshanteringApi.Program.Main(String[] args) in C:\vsts\rs_source\Lakemedelshantering\LakemedelshanteringApi\LakemedelshanteringApi\Program.cs:line 17

Program.cs代码

public static void Main(string[] args) 
{
    CreateHostBuilder(args).Build().Run();         
}  
  
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>             
{   
    webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>   
        {   
            config.SetBasePath(Directory.GetCurrentDirectory());  
            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            config.AddEnvironmentVariables(); 
            config.Build();
        });  
       webBuilder.UseStartup<Startup>();   
   });
}
解决方案

这个问题核心是.NET 6对静态Web资产的处理逻辑变化,部署时错误加载了开发环境生成的静态资产清单,导致硬编码的本地路径被带入生产环境。以下是具体修复步骤:

  • 仅在开发环境启用静态Web资产
    修改Program.cs,添加环境判断,避免生产环境加载开发模式的静态资产配置:

    public static IHostBuilder CreateHostBuilder(string[] args) => 
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>             
            {   
                webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                webBuilder.ConfigureAppConfiguration((hostingContext, config) =>   
                {   
                    config.SetBasePath(Directory.GetCurrentDirectory());  
                    config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                    config.AddEnvironmentVariables(); 
                });
                // 仅开发环境启用静态Web资产加载
                webBuilder.ConfigureServices((context, services) =>
                {
                    if (context.HostingEnvironment.IsDevelopment())
                    {
                        StaticWebAssetsLoader.UseStaticWebAssets(context.HostingEnvironment, context.Configuration);
                    }
                });
                webBuilder.UseStartup<Startup>();   
            });
    
  • 清理残留文件并重新发布
    删除项目根目录下的obj和bin文件夹,避免残留开发环境的清单文件;使用dotnet publish命令重新生成部署包,确保生产环境静态资产配置正确;重新部署到Azure覆盖原有文件。

  • 检查Azure环境配置
    确认Azure App Service的应用设置中,ASPNETCORE_ENVIRONMENT值为Production;检查部署包内是否包含wwwroot文件夹,确保静态文件已被正确打包。

  • 简化冗余配置
    .NET 6的CreateDefaultBuilder已经默认处理了ContentRoot和BasePath的设置,可移除代码中重复的UseContentRoot和SetBasePath调用,减少配置出错概率。

内容的提问来源于stack exchange,提问作者Carl-Johan Uhlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:46