File: PublishMutationUtilities.cs
Web Access
Project: src\src\sdk\src\Tasks\sdk-tasks\sdk-tasks.csproj (sdk-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 System.Text.Json.Nodes;

namespace Microsoft.DotNet.Build.Tasks
{
    public class PublishMutationUtilities
    {
        private static readonly JsonSerializerOptions s_writeOptions = new() { WriteIndented = true };

        public static void ChangeEntryPointLibraryName(string depsFile, string newName)
        {
            var deps = JsonNode.Parse(File.ReadAllText(depsFile));

            string version = null;
            foreach (var target in deps["targets"]!.AsObject())
            {
                var targetObj = target.Value!.AsObject();
                var targetLibrary = targetObj.FirstOrDefault();
                if (targetLibrary.Key == null)
                {
                    continue;
                }
                version = targetLibrary.Key.Substring(targetLibrary.Key.IndexOf('/') + 1);
                var targetLibraryValue = targetLibrary.Value;
                targetObj.Remove(targetLibrary.Key);
                if (newName != null)
                {
                    targetObj.Add(newName + '/' + version, targetLibraryValue);
                }
            }
            if (version != null)
            {
                var librariesObj = deps["libraries"]!.AsObject();
                var library = librariesObj.First();
                var libraryValue = library.Value;
                librariesObj.Remove(library.Key);
                if (newName != null)
                {
                    librariesObj.Add(newName + '/' + version, libraryValue);
                }
                File.WriteAllText(depsFile, deps.ToJsonString(s_writeOptions));
            }
        }
    }
}