| File: parent\Common\ConflictResolution\PlatformManifestReader.cs | Web Access |
| Project: Microsoft.NET.Build.Extensions.Tasks.csproj (Microsoft.NET.Build.Extensions.Tasks) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using Microsoft.Build.Framework; namespace Microsoft.NET.Build.Tasks.ConflictResolution { static class PlatformManifestReader { static readonly char[] s_manifestLineSeparator = new[] { '|' }; public static IEnumerable<ConflictItem> LoadConflictItems(AbsolutePath? manifestPath, Logger log) { if (manifestPath is not AbsolutePath path) { throw new ArgumentNullException(nameof(manifestPath)); } if (!File.Exists(path)) { string errorMessage = string.Format(CultureInfo.CurrentCulture, Strings.CouldNotLoadPlatformManifest, path.OriginalValue); log.LogError(errorMessage); yield break; } using (var manifestStream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)) using (var manifestReader = new StreamReader(manifestStream)) { for (int lineNumber = 0; !manifestReader.EndOfStream; lineNumber++) { var line = manifestReader.ReadLine()?.Trim(); if (line is null || line.Length == 0 || line[0] == '#') { continue; } var lineParts = line.Split(s_manifestLineSeparator); if (lineParts.Length != 4) { string errorMessage = string.Format(CultureInfo.CurrentCulture, Strings.ErrorParsingPlatformManifest, path.OriginalValue, lineNumber, "fileName|packageId|assemblyVersion|fileVersion"); log.LogError(errorMessage); yield break; } var fileName = lineParts[0].Trim(); var packageId = lineParts[1].Trim(); var assemblyVersionString = lineParts[2].Trim(); var fileVersionString = lineParts[3].Trim(); Version? assemblyVersion = null, fileVersion = null; if (assemblyVersionString.Length != 0 && !Version.TryParse(assemblyVersionString, out assemblyVersion)) { string errorMessage = string.Format(CultureInfo.CurrentCulture, Strings.ErrorParsingPlatformManifestInvalidValue, path.OriginalValue, lineNumber, "AssemblyVersion", assemblyVersionString); log.LogError(errorMessage); } if (fileVersionString.Length != 0 && !Version.TryParse(fileVersionString, out fileVersion)) { string errorMessage = string.Format(CultureInfo.CurrentCulture, Strings.ErrorParsingPlatformManifestInvalidValue, path.OriginalValue, lineNumber, "FileVersion", fileVersionString); log.LogError(errorMessage); } yield return new ConflictItem(fileName, packageId, assemblyVersion, fileVersion); } } } } }