File: src\VisualStudio\Core\Def\UnusedReferences\ProjectAssets\ProjectAssetsFileReader.cs
Web Access
Project: src\src\Workspaces\Remote\ServiceHub\Microsoft.CodeAnalysis.Remote.ServiceHub.csproj (Microsoft.CodeAnalysis.Remote.ServiceHub)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Collections.Immutable;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Shared.Utilities;
using Newtonsoft.Json;
 
namespace Microsoft.CodeAnalysis.UnusedReferences.ProjectAssets;
 
internal static partial class ProjectAssetsFileReader
{
    /// <summary>
    /// Enhances references with the assemblies they bring into the compilation and their dependency hierarchy.
    /// </summary>
    public static async Task<ImmutableArray<ReferenceInfo>> ReadReferencesAsync(
        ImmutableArray<ReferenceInfo> projectReferences,
        string projectAssetsFilePath)
    {
        var doesProjectAssetsFileExist = IOUtilities.PerformIO(() => File.Exists(projectAssetsFilePath));
        if (!doesProjectAssetsFileExist)
        {
            return [];
        }
 
        var projectAssetsFileContents = await IOUtilities.PerformIOAsync(async () =>
        {
            using var fileStream = File.OpenRead(projectAssetsFilePath);
            using var reader = new StreamReader(fileStream);
            return await reader.ReadToEndAsync().ConfigureAwait(false);
        }).ConfigureAwait(false);
 
        if (projectAssetsFileContents is null)
        {
            return [];
        }
 
        try
        {
            var projectAssets = JsonConvert.DeserializeObject<ProjectAssetsFile>(projectAssetsFileContents);
            return ProjectAssetsReader.AddDependencyHierarchies(projectReferences, projectAssets);
        }
        catch
        {
            return [];
        }
    }
}