我知道对于旧版本的.NET,您可以通过以下方法确定是否安装了给定的版本

https://support.microsoft.com/en-us/kb/318785  

是否有官方的方法来确定是否安装了。net Core ?

(我不是说SDK,我想检查一个没有SDK的服务器,以确定它是否安装了DotNetCore.1.0.0-WindowsHosting.exe)

我能看到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NET Cross-Platform Runtime Environment\.NET Framework 4.6\Win\v1-rc1 

在我的windows 7机器上使用1.0.11123.0版本#,但我在windows 10机器上没有看到相同的东西。


当前回答

我主要使用Windows开发机器和服务器。

我只是想指出(至少对于NET。Core 2.0及以上版本),惟一需要做的就是在命令提示符中执行dotnet——info以获取有关已安装的最新版本的信息。如果安装了。net Core,你会得到一些响应。

在我的开发机器(Windows 10)上,结果如下所示。SDK是2.1.2,运行时是2.0.3。

.NET Command Line Tools (2.1.2)

Product Information:
 Version:            2.1.2
 Commit SHA-1 hash:  5695315371

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.15063
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.1.2\

Microsoft .NET Core Shared Framework Host

  Version  : 2.0.3
  Build    : a9190d4a75f4a982ae4b4fa8d1a24526566c69df

在我的一台运行Windows Server 2016与Windows Server托管包(没有SDK)的服务器上,结果如下所示。没有SDK,运行时是2.0.3。

Microsoft .NET Core Shared Framework Host

Version  : 2.0.3
Build    : a9190d4a75f4a982ae4b4fa8d1a24526566c69df

干杯!

其他回答

在所有其他答案之后,这可能会被证明是有用的。

在Visual Studio中打开应用程序。在“解决方案资源管理器”中,右键单击项目。单击“属性”。单击应用程序。在“目标框架”下,点击下拉按钮,你就看到了所有已安装的框架。

顺便说一句,你现在可以选择你想要的框架。

使用Powershell:

Runtimes:

(dir (Get-Command dotnet).Path.Replace('dotnet.exe', 'shared\Microsoft.NETCore.App')).Name

SDKs:

(dir (Get-Command dotnet).Path.Replace('dotnet.exe', 'sdk')).Name

我来这里是为了寻找一种程序化的方法来确定这一点;虽然这个问题有很多好的答案,但似乎没有一个是程序化的。

我用c#做了一个小文件,解析dotnet.exe——list-runtimes的输出,可以很容易地适应你的需要。它使用CliWrap nuget包;你可能不需要它,但我已经在我的项目中使用了它,因为它使命令行处理更容易满足我的需求。

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using CliWrap;
using CliWrap.EventStream;

// License: Do whatever you want with this. This is what my project uses,
// I make no guarantees it works or will work in the future
// THIS IS ONLY FOR .NET CORE DETECTION (no .NET framework!)
// Requires CliWrap https://github.com/Tyrrrz/CliWrap

namespace DotnetHelper
{
    /// <summary>
    /// Class that can determine if a version of .NET Core is installed
    /// </summary>
    public class DotNetRuntimeVersionDetector
    {
        /// <summary>
        /// This is very windows specific
        /// </summary>
        /// <param name="desktopVersionsOnly">If it needs to filter to Windows Desktop versions only (WPF/Winforms).</param>
        /// <returns>List of versions matching the specified version</returns>
        public static async Task<Version[]> GetInstalledRuntimeVersions(bool desktopVersion)
        {
            // No validation. Make sure exit code is checked in the calling process.
            var cmd = Cli.Wrap(@"dotnet.exe").WithArguments(@"--list-runtimes").WithValidation(CommandResultValidation.None);
            var runtimes = new List<Version>();
            await foreach (var cmdEvent in cmd.ListenAsync())
            {
                switch (cmdEvent)
                {
                    case StartedCommandEvent started:
                        break;
                    case StandardOutputCommandEvent stdOut:
                        if (string.IsNullOrWhiteSpace(stdOut.Text))
                        {
                            continue;
                        }

                        if (stdOut.Text.StartsWith(@"Microsoft.NETCore.App") && !desktopVersion)
                        {
                            runtimes.Add(parseVersion(stdOut.Text));
                        }
                        else if (stdOut.Text.StartsWith(@"Microsoft.WindowsDesktop.App") && desktopVersion)
                        {
                            runtimes.Add(parseVersion(stdOut.Text));
                        }
                        break;
                    case StandardErrorCommandEvent stdErr:
                        break;
                    case ExitedCommandEvent exited:
                        break;
                }
            }

            return runtimes.ToArray();
        }

        private static Version parseVersion(string stdOutText)
        {
            var split = stdOutText.Split(' ');
            return Version.Parse(split[1]); // 0 = SDK name, 1 = version, 2+ = path parts
        }
    }
}

对于没有SDK的纯运行时环境,例如安装了Windows托管包的服务器,正确的答案是使用以下命令运行PowerShell:

dotnet --info

根据官方文件:

——version选项“打印正在使用的. net Core SDK的版本”,因此如果SDK未安装,该选项将不起作用。而…… info选项“打印CLI工具和环境的详细信息,比如当前的操作系统、提交版本的SHA以及其他信息。”

这是另一篇解释。net Core版本控制工作原理的官方文章。:)

确定.NET Core是否安装在Windows上的一个伪方法是:

按Windows + R 键入cmd 在命令提示符上,键入dotnet——version

如果安装了. net Core,在上述步骤中应该不会出现任何错误。