如何最好地检索已安装的.NET桌面运行时版本?

4
我需要以编程方式(使用C#)确定系统上是否安装了特定的.NET桌面运行时版本。
一种方法是像这篇文章建议的那样在注册表中检查版本。但是,这只会检索到最新安装的版本。例如,在ASP.NET Core版本中,可以在此处的注册表中找到:SOFTWARE\Microsoft\ASP.NET Core\Shared Framework System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;只会检索应用程序正在运行的框架版本。
官方方式似乎是使用命令“dotnet --list-runtimes”(由Microsoft 在此处记录)。这将需要从应用程序启动cmd进程。
还有其他可能的方法来检索当前安装的.NET桌面运行时版本吗?

你的上下文是什么?你是在检查你的应用程序是否可以安装吗?如果是这样,请参考 Visual Studio Installer Projects Extension - 相比于试图弄清楚已安装了什么,它成为了一个先决条件(可以作为过程的一部分安装)。 - EdSF
我想部署和运行一个.NET桌面运行时5.0.x可执行文件,但仅当系统上不存在更高版本时才能实现。应该可以在不使用MSI技术的情况下完成。 - Sebastian
在我看来,你陷入了“先有鸡还是先有蛋”的境地。为了“找出系统中有什么”,你必须安装“某些东西”(假设它可以被安装——你怎么知道呢——因此又回到了先有鸡还是先有蛋的问题?)或者让用户“自己做一些事情并让你知道”。根据过去的经验,安装程序项目对最终用户来说是“无痛苦”的。 - EdSF
换句话说,您编写的应用程序基于某个版本的 .Net,这成为一个前提条件(无论如何)。安装程序 msi 将确定该版本是否可用,并在不可用时 可选地 下载它。否则,您将会重新创建安装程序已经完成的工作,或者根据您作为软件提供商的“支持框架”编写不同版本的 .Net 应用程序,并让用户选择其中之一... - EdSF
你想要做什么?你可能根本不需要知道运行时版本。NET 5和6是.NET Core 5和6。它们存储的位置不同于.NET Framework运行时所存储的位置,也完全不需要安装。你可以创建一个自包含的可执行文件,甚至是一个包含运行应用程序所需所有库的单个文件可执行文件,而无需安装运行时。 - Panagiotis Kanavos
显示剩余2条评论
1个回答

2

虽然不是一个很好的方法,但您可以检查系统中是否存在.NET安装文件夹。对于.NET运行时,安装文件夹为 -

C:\program files\dotnet\shared{runtime-type}{version}\


2
实际上,这是官方推荐的方法。问题是关于.NET Core而不是.NET Foundation,因此检查文件夹位置是完全可以的。虽然可能并不必要,因为.NET Core允许发布自包含应用程序。 - Panagiotis Kanavos

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