| File: StaticWebAssetsReadPackManifest.cs | Web Access |
| Project: src\sdk\src\StaticWebAssetsSdk\Tasks\Microsoft.NET.Sdk.StaticWebAssets.Tasks.csproj (Microsoft.NET.Sdk.StaticWebAssets.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 System.Text.Json; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace Microsoft.AspNetCore.StaticWebAssets.Tasks; public class StaticWebAssetsReadPackManifest : Task { [Required] public string ManifestPath { get; set; } [Output] public ITaskItem[] Files { get; set; } [Output] public ITaskItem[] AdditionalElementsToRemoveFromPacking { get; set; } public override bool Execute() { if (!File.Exists(ManifestPath)) { Log.LogError($"Manifest file at '{ManifestPath}' not found."); return false; } try { var manifest = JsonSerializer.Deserialize<StaticWebAssetsPackManifest>(File.ReadAllBytes(ManifestPath)); Files = manifest.Files.Select(ToTaskItem).ToArray(); AdditionalElementsToRemoveFromPacking = manifest.ElementsToRemove?.Select(e => new TaskItem(e)).ToArray() ?? Array.Empty<ITaskItem>(); } catch (Exception ex) { Log.LogErrorFromException(ex, showStackTrace: true, showDetail: true, file: ManifestPath); } return !Log.HasLoggedErrors; static ITaskItem ToTaskItem(StaticWebAssetPackageFile file) { var result = new TaskItem(file.Id); result.SetMetadata(nameof(StaticWebAssetPackageFile.PackagePath), file.PackagePath); return result; } } private sealed class StaticWebAssetPackageFile { public string Id { get; set; } public string PackagePath { get; set; } } private sealed class StaticWebAssetsPackManifest { public StaticWebAssetPackageFile[] Files { get; set; } public string[] ElementsToRemove { get; set; } } }