From b480eb9072dd0b10ab03cba539c819e8e01ad73e Mon Sep 17 00:00:00 2001 From: Mihai Codoban Date: Thu, 28 Apr 2016 17:49:04 -0700 Subject: [PATCH] Better error messages when makerunnable fails --- .../BindingRedirectGenerator.cs | 55 +++++++++++-------- src/dotnet/Program.cs | 3 +- .../dotnet-build/DotnetProjectBuilder.cs | 23 +++++--- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/Microsoft.DotNet.Compiler.Common/BindingRedirectGenerator.cs b/src/Microsoft.DotNet.Compiler.Common/BindingRedirectGenerator.cs index 2a6e6b66d..1227c9866 100644 --- a/src/Microsoft.DotNet.Compiler.Common/BindingRedirectGenerator.cs +++ b/src/Microsoft.DotNet.Compiler.Common/BindingRedirectGenerator.cs @@ -179,33 +179,40 @@ namespace Microsoft.DotNet.Cli.Compiler.Common private static AssemblyReferenceInfo GetAssemblyInfo(LibraryAsset arg) { - using (var peReader = new PEReader(File.OpenRead(arg.ResolvedPath))) + try { - var metadataReader = peReader.GetMetadataReader(); - - var definition = metadataReader.GetAssemblyDefinition(); - - var identity = new AssemblyIdentity( - metadataReader.GetString(definition.Name), - definition.Version, - metadataReader.GetString(definition.Culture), - GetPublicKeyToken(metadataReader.GetBlobBytes(definition.PublicKey)) - ); - - var references = new List(metadataReader.AssemblyReferences.Count); - - foreach (var assemblyReferenceHandle in metadataReader.AssemblyReferences) + using (var peReader = new PEReader(File.OpenRead(arg.ResolvedPath))) { - var assemblyReference = metadataReader.GetAssemblyReference(assemblyReferenceHandle); - references.Add(new AssemblyIdentity( - metadataReader.GetString(assemblyReference.Name), - assemblyReference.Version, - metadataReader.GetString(assemblyReference.Culture), - GetPublicKeyToken(metadataReader.GetBlobBytes(assemblyReference.PublicKeyOrToken)) - )); - } + var metadataReader = peReader.GetMetadataReader(); - return new AssemblyReferenceInfo(identity, references.ToArray()); + var definition = metadataReader.GetAssemblyDefinition(); + + var identity = new AssemblyIdentity( + metadataReader.GetString(definition.Name), + definition.Version, + metadataReader.GetString(definition.Culture), + GetPublicKeyToken(metadataReader.GetBlobBytes(definition.PublicKey)) + ); + + var references = new List(metadataReader.AssemblyReferences.Count); + + foreach (var assemblyReferenceHandle in metadataReader.AssemblyReferences) + { + var assemblyReference = metadataReader.GetAssemblyReference(assemblyReferenceHandle); + references.Add(new AssemblyIdentity( + metadataReader.GetString(assemblyReference.Name), + assemblyReference.Version, + metadataReader.GetString(assemblyReference.Culture), + GetPublicKeyToken(metadataReader.GetBlobBytes(assemblyReference.PublicKeyOrToken)) + )); + } + + return new AssemblyReferenceInfo(identity, references.ToArray()); + } + } + catch (Exception e) + { + throw new InvalidDataException($"Could not read assembly info for {arg.ResolvedPath}", e); } } diff --git a/src/dotnet/Program.cs b/src/dotnet/Program.cs index 1ab628b14..4aacebc2b 100644 --- a/src/dotnet/Program.cs +++ b/src/dotnet/Program.cs @@ -50,7 +50,8 @@ namespace Microsoft.DotNet.Cli } catch (GracefulException e) { - Console.WriteLine(e.Message.Red().Bold()); + Console.WriteLine(CommandContext.IsVerbose() ? e.ToString().Red().Bold() : e.Message.Red().Bold()); + return 1; } } diff --git a/src/dotnet/commands/dotnet-build/DotnetProjectBuilder.cs b/src/dotnet/commands/dotnet-build/DotnetProjectBuilder.cs index 2bc9e507d..05afba07c 100644 --- a/src/dotnet/commands/dotnet-build/DotnetProjectBuilder.cs +++ b/src/dotnet/commands/dotnet-build/DotnetProjectBuilder.cs @@ -116,17 +116,24 @@ namespace Microsoft.DotNet.Tools.Build private void MakeRunnable(ProjectGraphNode graphNode) { - var runtimeContext = graphNode.ProjectContext.ProjectFile.HasRuntimeOutput(_args.ConfigValue) ? - _args.Workspace.GetRuntimeContext(graphNode.ProjectContext, _args.GetRuntimes()) : - graphNode.ProjectContext; + try + { + var runtimeContext = graphNode.ProjectContext.ProjectFile.HasRuntimeOutput(_args.ConfigValue) ? + _args.Workspace.GetRuntimeContext(graphNode.ProjectContext, _args.GetRuntimes()) : + graphNode.ProjectContext; - var outputPaths = runtimeContext.GetOutputPaths(_args.ConfigValue, _args.BuildBasePathValue, _args.OutputValue); - var libraryExporter = runtimeContext.CreateExporter(_args.ConfigValue, _args.BuildBasePathValue); + var outputPaths = runtimeContext.GetOutputPaths(_args.ConfigValue, _args.BuildBasePathValue, _args.OutputValue); + var libraryExporter = runtimeContext.CreateExporter(_args.ConfigValue, _args.BuildBasePathValue); - CopyCompilationOutput(outputPaths); + CopyCompilationOutput(outputPaths); - var executable = new Executable(runtimeContext, outputPaths, libraryExporter, _args.ConfigValue); - executable.MakeCompilationOutputRunnable(); + var executable = new Executable(runtimeContext, outputPaths, libraryExporter, _args.ConfigValue); + executable.MakeCompilationOutputRunnable(); + } + catch (Exception e) + { + throw new Exception($"Failed to make the following project runnable: {graphNode.ProjectContext.GetDisplayName()}", e); + } } protected override CompilationResult RunCompile(ProjectGraphNode projectNode)