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

如何禁用.NET 8 Blazor Web App中Razor类库隔离样式表的哈希生成

问题:移除.NET 8 Blazor类库样式表文件名的动态哈希

我有一个名为Contoso的.NET 8 Blazor Web应用,包含两个Razor类库:LibA与应用在同一Visual Studio解决方案中,LibB则属于另一个独立解决方案。启动应用时,系统会动态生成整合所有库样式的Contoso.styles.css,其中的导入语句如下:

@import '_content/LibA/LibA.bundle.scp.css';
@import '_content/LibB/LibB.ca3u9u6gjt.bundle.scp.css';

LibB这类外部库的样式表文件名带有动态哈希标识(如ca3u9u6gjt),每次库更新且样式变更时哈希都会改变。由于需要直接指定固定文件名来保证样式加载顺序,且不想每次更新都修改文件名,因此需要禁用该哈希生成行为(此行为从.NET 8开始出现)。

已尝试的操作

在Web应用和LibB的.csproj文件中添加以下配置,但未生效:

<PropertyGroup>
    <CssScopedGenerateSourceHash>false</CssScopedGenerateSourceHash>
</PropertyGroup>

更新说明

通过Visual Studio的Package Manager Console执行dotnet pack生成LibB的包时,能得到不带哈希的LibB.bundle.scp.css;但通过Azure DevOps Pipeline中的DotNetCoreCLI@2任务执行pack命令时,生成的包仍会给样式表文件名添加哈希。


解决方案

1. 确保类库项目配置覆盖所有构建场景

在LibB的.csproj中,将配置明确绑定到Release构建配置(Azure DevOps Pipeline通常默认使用Release配置打包),或者设置为全局生效:

<!-- 针对Release配置生效 -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CssScopedGenerateSourceHash>false</CssScopedGenerateSourceHash>
</PropertyGroup>

<!-- 或者全局所有配置生效 -->
<PropertyGroup>
    <CssScopedGenerateSourceHash>false</CssScopedGenerateSourceHash>
</PropertyGroup>

2. 在Azure DevOps Pipeline中显式传递属性

修改Pipeline中的DotNetCoreCLI@2打包任务,在arguments参数中强制指定禁用哈希生成的属性,确保打包过程读取该配置:

- task: DotNetCoreCLI@2
  inputs:
    command: 'pack'
    packagesToPack: '**/LibB.csproj'
    versioningScheme: 'off' # 根据实际需求调整版本策略
    arguments: '/p:CssScopedGenerateSourceHash=false'

3. 验证结果

打包完成后,解压生成的nupkg包,检查content目录下的样式文件是否为LibB.bundle.scp.css;将该包引用到Contoso应用后,启动应用查看Contoso.styles.css中的导入语句,确认LibB的样式路径已无哈希标识。


内容的提问来源于stack exchange,提问作者cpt.oneeye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:53:26