VS可构建项目在Azure Pipeline发布失败,报错缺失静态资源清单
问题排查:Azure Pipeline发布.NET6项目时StaticWebAssets缺失错误
背景
为某应用新建Azure Pipeline用于编译生成Windows可执行文件Artifact,该应用原通过Docker Pipeline运行完全正常,且相同Pipeline在其他项目可正常工作,但当前Pipeline在Publish阶段失败。
环境配置
Pipeline基础配置
pool: vmImage: ‘windows-latest’ variables: name: runtimeIdentifier default: win-x64
Publish任务配置
- task: DotNetCoreCLI@2 displayName: Publish inputs: command: publish publishWebProjects: false projects: '${{Parameters.buildProjects}}' arguments: '--configuration Release --output $(build.artifactstagingdirectory) --no-restore --no-build -r ${{Parameters.runtimeIdentifier}} --self-contained true --nologo -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:Version=$(Build.BuildNumber) -p:DebugType=embedded' zipAfterPublish: True
项目csproj核心配置
<TargetFramework>net6.0</TargetFramework> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <OutputType>Exe</OutputType> <RuntimeIdentifiers>linux-musl-x64;win-x64</RuntimeIdentifiers> <ErrorOnDuplicatePublishOutputFiles>False</ErrorOnDuplicatePublishOutputFiles>
项目引用的Microsoft包
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.4" NoWarn="NU1605" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.4" NoWarn="NU1605" /> <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.2" /> <PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.15.1" />
错误信息
Publish阶段触发如下错误:
C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk.Razor\targets\Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(658,7): error : Manifest file at 'obj\Release\net6.0\win-x64\staticwebassets.build.json' not found. [D:\a\1\s\src\FieldPlug\ProductLine\Product\Product.csproj]
Pipeline运行关键日志片段:
"C:\Program Files\dotnet\dotnet.exe" publish D:\a\1\s\src\FieldPlug\ProductLine\Product --configuration Release --output D:\a\1\a\SNMP --no-restore --no-build -r win-x64 --self-contained true --nologo -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:Version=1.8.3-beta3-152-snmp -p:DebugType=embedded **C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk.Razor\targets\Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(658,7): error : Manifest file at 'obj\Release\net6.0\win-x64\staticwebassets.build.json' not found. [D:\a\1\s\src\FieldPlug\ProductLine\Product\Product.csproj]** ##[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1
初步排查方向
- SDK版本不匹配:项目目标框架为.NET6,但Pipeline自动使用了.NET7 SDK(7.0.103),跨版本构建可能引发兼容性问题
- 非Web项目触发Web构建逻辑:项目引用了AspNetCore相关包,导致Razor StaticWebAssets的构建目标被自动引入,但项目本身无Web资源,未生成对应清单文件
- 构建参数不一致:Publish使用
--no-build,但前置Build步骤未指定相同的-r win-x64参数,导致obj目录下无对应Runtime的构建产物
解决方案建议
1. 锁定.NET SDK版本
在项目根目录添加global.json指定使用.NET6 SDK:
{ "sdk": { "version": "6.0.x", "rollForward": "latestPatch" } }
同时在Pipeline中添加任务确保安装指定版本:
- task: UseDotNet@2 displayName: 'Install .NET 6 SDK' inputs: packageType: 'sdk' version: '6.0.x'
2. 禁用StaticWebAssets生成
由于项目并非Web应用,直接在csproj中关闭StaticWebAssets构建逻辑:
<PropertyGroup> <EnableStaticWebAssets>false</EnableStaticWebAssets> </PropertyGroup>
3. 统一Build与Publish的Runtime参数
修改Build任务,传入与Publish一致的RuntimeIdentifier,确保构建产物对应目标平台:
- task: DotNetCoreCLI@2 displayName: Build inputs: command: build projects: '${{Parameters.buildProjects}}' arguments: '--configuration Release -r ${{Parameters.runtimeIdentifier}} --no-restore'
4. 清理构建缓存
在Pipeline开头添加清理任务,避免旧构建产物干扰:
- task: CmdLine@2 displayName: 'Clean build artifacts' inputs: script: 'dotnet clean --configuration Release && rmdir /s /q obj bin'
内容的提问来源于stack exchange,提问作者Vincent Vega
相关产品推荐
相关产品推荐

