| File: Utils\DotnetSdkUtils.cs | Web Access |
| Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Hosting.Dcp.Process; namespace Aspire.Hosting.Utils; internal static class DotnetSdkUtils { private static readonly Dictionary<string, string> s_dotnetCliEnvVars = new() { ["DOTNET_NOLOGO"] = "true", ["DOTNET_GENERATE_ASPNET_CERTIFICATE"] = "false", ["DOTNET_CLI_TELEMETRY_OPTOUT"] = "true", ["DOTNET_SKIP_FIRST_TIME_EXPERIENCE"] = "true", ["SuppressNETCoreSdkPreviewMessage"] = "true" }; public static async Task<Version?> TryGetVersionAsync(string? workingDirectory) { // Get version by parsing the SDK version string Version? parsedVersion = null; try { var (task, _) = ProcessUtil.Run(new("dotnet") { WorkingDirectory = workingDirectory ?? Environment.CurrentDirectory, Arguments = "--version", EnvironmentVariables = s_dotnetCliEnvVars, OnOutputData = data => { if (!string.IsNullOrWhiteSpace(data)) { // The SDK version is in the first line of output var line = data.AsSpan().Trim(); // Trim any pre-release suffix var hyphenIndex = line.IndexOf('-'); var versionSpan = hyphenIndex >= 0 ? line[..hyphenIndex] : line; if (Version.TryParse(versionSpan, out var v)) { parsedVersion = v; } } } }); var result = await task.ConfigureAwait(false); if (result.ExitCode == 0) { return parsedVersion; } } catch (Exception) { } return null; } }