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

ASP.NET Core 3.1 Hot Reload速度过慢 如何优化热重载及增量编译速度

问题原因分析

你遇到的增量编译、热重载过慢的问题,绝大多数情况和项目结构、默认开发配置不合理直接相关。ASP.NET Core 3.1默认的编译策略会在构建时把所有Razor视图预编译到project.Views.dll中,每次代码改动都会触发全量的视图编译流程,再加上如果项目是单体架构,所有业务逻辑、数据访问、Web层代码耦合在同一个项目中,MSBuild增量检测时需要遍历大量无关联文件,进一步拉长了构建耗时。dotnet watch run默认没有开运行时编译的情况下,除了全量构建外还会额外增加进程重启、文件变更扫描的开销,所以耗时比单独dotnet build更长。

优化方案

  • 拆分项目架构
    将业务逻辑、数据访问、公共DTO/模型、通用工具类等非Web层代码全部抽离到独立的类库项目中,入口Web项目仅保留控制器、视图、过滤器、中间件、静态资源等Web层专属代码。调整后修改控制器或视图时,仅会触发Web项目的增量编译,不会重新编译类库部分,可大幅减少编译检测范围。
  • 启用Razor运行时编译
    开发环境下安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包,在Startup.cs的ConfigureServices方法中修改服务注册代码:
    services.AddControllersWithViews()
    // 仅开发环境启用
    .AddRazorRuntimeCompilation();
    
    开启后视图改动不会触发全量的Razor预编译,运行时会直接加载改动后的视图文件,省去project.Views.dll的编译耗时。
  • 优化dotnet watch配置
    在Web项目的.csproj文件中添加文件排除规则,减少watch工具的扫描范围:
    <ItemGroup>
      <WatchExclude Include="node_modules\**" />
      <WatchExclude Include="Logs\**" />
      <WatchExclude Include="wwwroot\lib\**" />
      <!-- 其他不需要触发重载的文件路径均可添加 -->
    </ItemGroup>
    
  • 精简开发环境编译配置
    在.csproj文件中针对Debug配置调整编译参数:
    <PropertyGroup Condition="'$(Configuration)'=='Debug'">
      <Optimize>false</Optimize>
      <DebugType>portable</DebugType>
      <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
      <CopyLocalLockFileAssemblies>false</CopyLocalLockFileAssemblies>
    </PropertyGroup>
    
    关闭不必要的代码分析、程序集复制逻辑,减少编译额外开销。
  • 使用高版本SDK编译
    可安装.NET 6+版本的SDK,在项目根目录添加global.json指定目标框架版本兼容3.1即可,高版本SDK的MSBuild增量编译、dotnet watch工具均有大量性能优化,兼容.NET Core 3.1项目的同时可显著提升构建速度。

热重载性能对标说明

优化完成后,ASP.NET Core 3.1的热重载完全可以达到Spring Boot devtools的数秒级重载水平:单纯修改控制器单字符的重载耗时可控制在2-3秒以内,视图修改的重载耗时可低至1秒以内,和Spring Boot devtools的表现基本持平。

内容的提问来源于stack exchange,提问作者Wayne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:36:02