| File: UpgradeLegacyWasmStaticWebAssets.cs | Web Access |
| Project: src\sdk\src\BlazorWasmSdk\Tasks\Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.csproj (Microsoft.NET.Sdk.BlazorWebAssembly.Tasks) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using Microsoft.AspNetCore.StaticWebAssets.Tasks; using Microsoft.Build.Framework; namespace Microsoft.NET.Sdk.BlazorWebAssembly; public class UpgradeLegacyWasmStaticWebAssets : Task { [Required] public ITaskItem[] LegacyAssets { get; set; } [Output] public ITaskItem[] UpgradedAssets { get; set; } public override bool Execute() { var upgradedAssets = new List<ITaskItem>(); var legacyAssets = LegacyAssets.Select(StaticWebAsset.FromV1TaskItem).ToArray(); var assetsByFinalPath = legacyAssets .GroupBy(asset => asset.ComputeTargetPath("", '/')) .ToDictionary(g => g.Key, g => g.ToArray()); foreach (var legacyAsset in legacyAssets) { var upgradedAsset = new StaticWebAsset(legacyAsset); legacyAsset.AssetKind = StaticWebAsset.AssetKinds.Build; if (string.Equals(Path.GetExtension(legacyAsset.RelativePath), ".gz", StringComparison.Ordinal)) { var relatedPath = legacyAsset.RelativePath.Substring(0, legacyAsset.RelativePath.Length - 3); var relatedAsset = assetsByFinalPath.TryGetValue(relatedPath, out var relatedAssets) ? relatedAssets.Single() : null; if (relatedAsset == null) { Log.LogError($"Could not find a corresponding asset for '{legacyAsset.RelativePath}'"); continue; } Log.LogMessage($"Upgrading '{legacyAsset.RelativePath}' to use '{relatedAsset.Identity}' as the related asset"); upgradedAsset.RelatedAsset = relatedAsset.Identity; upgradedAsset.AssetTraitName = "Content-Encoding"; upgradedAsset.AssetTraitValue = "gzip"; } upgradedAssets.Add(upgradedAsset.ToTaskItem()); } UpgradedAssets = [.. upgradedAssets]; return !Log.HasLoggedErrors; } }