Azure CI流水线未将Razor类库静态Web资源放入正确文件夹
解决.NET Core 3.1 Razor类库Azure CI打包静态资源路径错误问题
针对本地打包时静态资源正确放入/staticwebassets/,但Azure CI打包时被放入/content/wwwroot/的问题,可通过以下步骤修复(基于.NET Core 3.1环境,无需升级到.NET 6):
1. 覆盖默认的wwwroot文件打包规则
在csproj中添加规则,阻止SDK默认将wwwroot文件标记为Content并打包到content/wwwroot,同时确保静态资源被嵌入程序集:
<ItemGroup> <Content Remove="wwwroot\**\*" /> <EmbeddedResource Include="wwwroot\**\*" /> </ItemGroup>
2. 完善静态Web资产配置
确认csproj中的关键属性设置,保证静态Web资产的生成和路径映射:
<PropertyGroup> <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> <StaticWebAssetBasePath>_content/$(PackageId)</StaticWebAssetBasePath> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>
3. 对齐Azure CI的.NET SDK版本
本地与CI环境的SDK版本差异可能导致行为不一致,在Azure DevOps流水线中添加任务指定和本地一致的3.1.x版本:
- task: UseDotNet@2 inputs: packageType: 'sdk' version: '3.1.x'
4. 规范CI打包命令
确保CI使用dotnet pack命令,避免msbuild Pack目标的参数解析问题:
dotnet pack src/Package.Name/Package.Name.csproj -c Release -o $(Build.ArtifactStagingDirectory)
修改后的完整csproj示例
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> <RootNamespace>Package.Name</RootNamespace> <TargetFramework>netcoreapp3.1</TargetFramework> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> <GenerateMvcApplicationPartsAssemblyAttributes>true</GenerateMvcApplicationPartsAssemblyAttributes> <RazorCompileOnBuild>true</RazorCompileOnBuild> <IncludeRazorContentInPack>false</IncludeRazorContentInPack> <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> <EnableDefaultRazorGenerateItems>true</EnableDefaultRazorGenerateItems> <Version>1.0.0</Version> <StaticWebAssetBasePath>_content/$(PackageId)</StaticWebAssetBasePath> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup> <ItemGroup> <Content Remove="wwwroot\**\*" /> <EmbeddedResource Include="wwwroot\**\*" /> </ItemGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> <ItemGroup> <Folder Include="Helpers\" /> <Folder Include="Controllers\" /> <Folder Include="wwwroot\img\" /> <Folder Include="wwwroot\lib\js-cookie\" /> </ItemGroup> <ItemGroup> <PackageReference Include="IronPdf" Version="2023.1.11416" /> <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" /> <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.8" /> <PackageReference Include="Microsoft.Identity.Client" Version="4.21.1" /> <PackageReference Include="Microsoft.PowerBI.Api" Version="3.17.0" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="RestSharp" Version="108.0.3" /> <PackageReference Include="Select2.js" Version="4.0.13" /> <PackageReference Include="SendGrid" Version="9.21.0" /> <PackageReference Include="System.Drawing.Common" Version="5.0.3" /> </ItemGroup> </Project>
内容的提问来源于stack exchange,提问作者Bassios
相关产品推荐
相关产品推荐

