如何通过编程方式检查 .Net SDK 版本

3
我正在使用WPF应用程序。我想以编程方式检查是否安装了.Net SDK。 我正在使用以下代码获取SDK列表。但问题是注册表可能会在将来更改。
RegistryKey ndpKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\dotnet\Setup\InstalledVersions\x64\sdk");
var names = ndpKey.GetValueNames();

我运行了以下代码,但它给我一个.NET运行时版本。
var netCoreVersion = Environment.Version; 
var runtimeVersion= RuntimeInformation.FrameworkDescription;

我能否通过编程的方式找出 .Net SDK 是否已安装。


我必须问一下,你为什么想要在程序内部知道安装了哪些SDK呢?任何处理SDK的人都可以运行dotnet --list-sdks命令并获取列表。检查可用的运行时是一个更常见的情况。 - Logarr
@Logarr 我需要以编程方式构建一个 .NET 项目,因此在触发构建之前,我想确保 SDK 已安装。 - Faisal Sajjad
1
在这种情况下,我建议您了解如何执行 dotnet 命令行工具并解析其输出。您还需要确保处理该工具不存在的情况。 - Logarr
2个回答

1

有没有办法通过编程找出是否安装了.Net SDK。

没有专门的API可以做到这一点,因此要么继续查找注册表的方法,要么以编程方式调用dotnet命令行工具并捕获其输出:

Process process = new Process();
process.StartInfo.FileName = "dotnet.exe";
process.StartInfo.Arguments = "--version";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();

string version = process.StandardOutput.ReadToEnd()?.TrimEnd();

process.WaitForExit();

您可能还希望捕获异常以处理未安装工具的情况。


-2

从你的代码中,你可以这样做。

var netCoreVer = System.Environment.Version;
var runtimeVer = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;

3
这似乎就是原帖中举的例子,而且对他们来说行不通。唯一的区别是你加了完整的名称空间。 - Logarr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接