From 54278c294ef42746f4a0442967a33a8c6fa74a02 Mon Sep 17 00:00:00 2001 From: Mihai Codoban Date: Wed, 30 Mar 2016 14:51:43 -0700 Subject: [PATCH] Transform lock file reader exceptions into diagnostics --- .../ErrorCodes.DotNet.cs | 3 ++ .../ProjectContextBuilder.cs | 48 +++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.DotNet.ProjectModel/ErrorCodes.DotNet.cs b/src/Microsoft.DotNet.ProjectModel/ErrorCodes.DotNet.cs index 095bbf9b2..83e229eef 100644 --- a/src/Microsoft.DotNet.ProjectModel/ErrorCodes.DotNet.cs +++ b/src/Microsoft.DotNet.ProjectModel/ErrorCodes.DotNet.cs @@ -13,5 +13,8 @@ namespace Microsoft.DotNet.ProjectModel // Multiple libraries marked as "platform" public static readonly string DOTNET1013 = nameof(DOTNET1013); + + // Failed to read lock file + public static readonly string DOTNET1014 = nameof(DOTNET1014); } } diff --git a/src/Microsoft.DotNet.ProjectModel/ProjectContextBuilder.cs b/src/Microsoft.DotNet.ProjectModel/ProjectContextBuilder.cs index aeb423a46..e3315dafe 100644 --- a/src/Microsoft.DotNet.ProjectModel/ProjectContextBuilder.cs +++ b/src/Microsoft.DotNet.ProjectModel/ProjectContextBuilder.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; using Microsoft.DotNet.ProjectModel.Graph; using Microsoft.DotNet.ProjectModel.Resolution; using Microsoft.Extensions.Internal; @@ -138,6 +139,8 @@ namespace Microsoft.DotNet.ProjectModel public ProjectContext Build() { + var diagnostics = new List(); + ProjectDirectory = Project?.ProjectDirectory ?? ProjectDirectory; if (GlobalSettings == null && ProjectDirectory != null) @@ -159,7 +162,7 @@ namespace Microsoft.DotNet.ProjectModel LockFileLookup lockFileLookup = null; EnsureProjectLoaded(); - LockFile = LockFile ?? LockFileResolver(ProjectDirectory); + ReadLockFile(diagnostics); var validLockFile = true; string lockFileValidationMessage = null; @@ -193,7 +196,7 @@ namespace Microsoft.DotNet.ProjectModel if (target != null) { var nugetPackageResolver = new PackageDependencyProvider(PackagesDirectory, frameworkReferenceResolver); - var msbuildProjectResolver = new MSBuildDependencyProvider(Project ,ProjectResolver); + var msbuildProjectResolver = new MSBuildDependencyProvider(Project, ProjectResolver); ScanLibraries(target, lockFileLookup, libraries, msbuildProjectResolver, nugetPackageResolver, projectResolver); } } @@ -204,8 +207,6 @@ namespace Microsoft.DotNet.ProjectModel // Resolve the dependencies ResolveDependencies(libraries, referenceAssemblyDependencyResolver, out requiresFrameworkAssemblies); - var diagnostics = new List(); - // REVIEW: Should this be in NuGet (possibly stored in the lock file?) if (LockFile == null) { @@ -270,6 +271,45 @@ namespace Microsoft.DotNet.ProjectModel LockFile); } + private void ReadLockFile(ICollection diagnostics) + { + try + { + LockFile = LockFile ?? LockFileResolver(ProjectDirectory); + } + catch (FileFormatException e) + { + var lockFilePath = ""; + if (LockFile != null) + { + lockFilePath = LockFile.LockFilePath; + } + else if (Project != null) + { + lockFilePath = Path.Combine(Project.ProjectDirectory, LockFile.FileName); + } + + diagnostics.Add(new DiagnosticMessage( + ErrorCodes.DOTNET1014, + ComposeMessageFromInnerExceptions(e), + lockFilePath, + DiagnosticMessageSeverity.Error)); + } + } + + private static string ComposeMessageFromInnerExceptions(Exception exception) + { + var sb = new StringBuilder(); + + while (exception != null) + { + sb.AppendLine(exception.Message); + exception = exception.InnerException; + } + + return sb.ToString(); + } + private void ResolveDependencies(Dictionary libraries, ReferenceAssemblyDependencyResolver referenceAssemblyDependencyResolver, out bool requiresFrameworkAssemblies)