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

.NET 9中无法生成静态资源及清单文件问题排查

解决.NET 9 + Razor Pages + Parcel项目发布时的静态资源问题

问题现象

基于.NET 9、Razor Pages和Parcel构建的Web项目,执行dotnet publish -c Release后出现两个异常:

  • publish/wwwroot目录缺少预期的.br和.gz压缩文件
  • webapp.staticwebassets.endpoints.json文件无任何资源信息

解决方案

1. 启用静态资源压缩生成.br/.gz文件

.NET默认不会自动为wwwroot文件生成压缩包,需在项目配置中显式启用静态资产压缩,并确保Parcel构建的文件被纳入处理流程。

修改.csproj文件,在<PropertyGroup>中添加压缩相关配置:

<PropertyGroup>
  <TargetFramework>net9.0</TargetFramework>
  <!-- 启用静态资产压缩 -->
  <StaticWebAssetsEnableCompression>true</StaticWebAssetsEnableCompression>
  <!-- 指定需要生成的压缩格式 -->
  <StaticWebAssetsCompressionFormats>br;gz</StaticWebAssetsCompressionFormats>
</PropertyGroup>

同时添加ItemGroup标记wwwroot下的所有文件为静态资源:

<ItemGroup>
  <Content Update="wwwroot/**/*">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <StaticWebAsset>true</StaticWebAsset>
  </Content>
</ItemGroup>

2. 修复webapp.staticwebassets.endpoints.json为空的问题

该文件为空是因为.NET静态资源系统未扫描到wwwroot中的文件,需调整Parcel构建目标的执行时机,确保文件生成后被系统识别。

修改.csproj中的Publish目标,将BeforeTargets从BeforePublish改为ComputeFilesToPublish:

<Target Name="Publish" DependsOnTargets="Setup" BeforeTargets="ComputeFilesToPublish" Condition="'$(Configuration)' == 'Release'">
  <Exec Command="npm run publish" WorkingDirectory="$(ProjectDir)" />
</Target>

另外,清理Program.cs中重复的静态资源映射代码——.NET 9中MapRazorPages().WithStaticAssets()已包含静态资源映射逻辑,多余调用可能导致冲突:

// 移除该行重复代码
// application.MapStaticAssets();

application.MapRazorPages().WithStaticAssets();

3. 验证Parcel构建逻辑

确认Parcel脚本仅在构建前清理wwwroot,避免影响后续.NET处理流程(当前脚本逻辑已符合要求,可直接保留):

"scripts": {
  "publish": "rimraf ./wwwroot && parcel build ./approot/index.js --dist-dir ./wwwroot --no-cache --no-source-maps"
}

完成上述配置后,重新执行dotnet publish -c Release,即可验证publish/wwwroot目录是否生成.br/.gz文件,以及webapp.staticwebassets.endpoints.json是否包含资源条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:03:27