diff --git a/src/Tools/Microsoft.dotnet-openapi/src/Commands/BaseCommand.cs b/src/Tools/Microsoft.dotnet-openapi/src/Commands/BaseCommand.cs index 92fe39df4f..ac6e8bcdc8 100644 --- a/src/Tools/Microsoft.dotnet-openapi/src/Commands/BaseCommand.cs +++ b/src/Tools/Microsoft.dotnet-openapi/src/Commands/BaseCommand.cs @@ -200,44 +200,52 @@ namespace Microsoft.DotNet.OpenApi.Commands var packageId = kvp.Key; var version = urlPackages != null && urlPackages.ContainsKey(packageId) ? urlPackages[packageId] : kvp.Value; - var args = new[] { - "add", - "package", - packageId, - "--version", - version, - "--no-restore" - }; + await TryAddPackage(packageId, version, projectFile); + } + } - var muxer = DotNetMuxer.MuxerPathOrDefault(); - if (string.IsNullOrEmpty(muxer)) - { - throw new ArgumentException($"dotnet was not found on the path."); - } + private async Task TryAddPackage(string packageId, string packageVersion, FileInfo projectFile) + { + var args = new[] { + "add", + "package", + packageId, + "--version", + packageVersion, + "--no-restore" + }; - var startInfo = new ProcessStartInfo - { - FileName = muxer, - Arguments = string.Join(" ", args), - WorkingDirectory = projectFile.Directory.FullName, - RedirectStandardError = true, - RedirectStandardOutput = true, - }; + var muxer = DotNetMuxer.MuxerPathOrDefault(); + if (string.IsNullOrEmpty(muxer)) + { + throw new ArgumentException($"dotnet was not found on the path."); + } - var process = Process.Start(startInfo); + var startInfo = new ProcessStartInfo + { + FileName = muxer, + Arguments = string.Join(" ", args), + WorkingDirectory = projectFile.Directory.FullName, + RedirectStandardError = true, + RedirectStandardOutput = true, + }; - var timeout = 20; - if (!process.WaitForExit(timeout * 1000)) - { - throw new ArgumentException($"Adding package `{packageId}` to `{projectFile.Directory}` took longer than {timeout} seconds."); - } + using var process = Process.Start(startInfo); - if (process.ExitCode != 0) - { - Out.Write(process.StandardOutput.ReadToEnd()); - Error.Write(process.StandardError.ReadToEnd()); - throw new ArgumentException($"Could not add package `{packageId}` to `{projectFile.Directory}`"); - } + var timeout = 20; + if (!process.WaitForExit(timeout * 1000)) + { + throw new ArgumentException($"Adding package `{packageId}` to `{projectFile.Directory}` took longer than {timeout} seconds."); + } + + if (process.ExitCode != 0) + { + var output = await process.StandardOutput.ReadToEndAsync(); + var error = await process.StandardError.ReadToEndAsync(); + await Out.WriteAsync(output); + await Error.WriteAsync(error); + + throw new ArgumentException($"Could not add package `{packageId}` to `{projectFile.Directory}` due to: `{error}`"); } }