【问题标题】:How to determine if .NET Core is installed如何确定是否安装了 .NET Core
【发布时间】:2016-11-28 18:31:48
【问题描述】:

我知道对于旧版本的 .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 机器上看不到相同的内容。

【问题讨论】:

  • 好问题。任何关注 .NET Core 的人都知道,运行时和 SDK 版本控制是一个非常令人困惑的话题。
  • @Chiramisu,下面所有选中的都对我有用,但由于一些不相关的实现细节,我选择了 Desired State Configuration,并使用它来确保安装了 dnc windows 服务器托管。 (即我在 DotNetCore.1.0.0-WindowsServerHosting.exe 上有 Ensure=Absent,在 DotnetCore.2.0.5-WindowsServerHosting.exe 上有 Ensure=Present)(或您可以找到的任何其他文件名)。 DSC 处理与检查相关的所有问题,以确保安装/卸载了适当的软件包。
  • dotnet --list-sdks 和 dotnet --list-runtimes 在我的主机上可用,活动版本为 2.1.300-preview1-008174
  • 在 powershell dotnet --info Source 中运行以下命令

标签: c# asp.net-core .net-core


【解决方案1】:

很好的问题,答案并不简单。没有“显示所有 .net 核心版本”命令,但有希望。

编辑:

我不确定它是何时添加的,但 info 命令现在在其输出中包含此信息。它将打印出已安装的运行时和 SDK,以及一些其他信息:

dotnet --info

如果您只想查看 SDK:dotnet --list-sdks

如果您只想查看已安装的运行时:dotnet --list-runtimes

我在 Windows 上,但我猜在 Mac 或 Linux 上也可以使用当前版本。

另外,您可以参考.NET Core Download Archive 来帮助您解读 SDK 版本。


旧信息: 低于这一点的所有内容都是旧信息,相关性较低,但可能仍然有用。

查看已安装的运行时

在 Windows 资源管理器中打开 C:\Program Files\dotnet\shared\Microsoft.NETCore.App

查看已安装的SDK

在 Windows 资源管理器中打开 C:\Program Files\dotnet\sdk

(位置来源:A developer's blog


此外,您可以通过在命令提示符下发出以下命令来查看安装的最新运行时和 SDK 版本:

dotnet 列出的第一件事是最新的运行时版本。 免责声明:这不再有效,但可能适用于旧版本。

dotnet --version 最新 SDK 版本 免责声明: 显然,此结果可能会受到任何 global.json 配置文件的影响。


在 macOS 上,您可以使用以下命令检查 .net 核心版本。

ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/

在 Ubuntu 或 Alpine 上:

ls /usr/share/dotnet/shared/Microsoft.NETCore.App/

它将列出已安装版本名称的文件夹。

【讨论】:

  • 在 macOS 上:ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/
  • @SergiiVolchkov 感谢您的评论。你能告诉我如何从 mac 上卸载 dotnet core1.0.0 吗?
  • .NET Core 2.1.0 添加“dotnet --list-runtimes”和“dotnet --list-sdks”
  • dotnet --version 列出了正在使用的 SDK,默认情况下是最新的,但并非总是如此。如果您的文件夹结构中有 global.json 文件,它将显示 global.json 中设置的任何版本,而不是最新的。
  • 对于新手 - 这些需要在 windows cmd 行上运行
【解决方案2】:

使用Powershell:

运行时:

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

SDK:

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

【讨论】:

  • @MarceloFilho 你有哪个版本?您可以使用[System.Environment]::OSVersion 获取它。我使用 Windows 10 版本 10.0.15063.0 测试了上述命令。它工作正常。
  • 我可以确认这在 Windows Server 2016 和 Windows 10 上完美运行。
  • dotnet 命令不是只有安装了 SDK 才能使用吗?这与 OP 的要求完全相反。
  • @AurimasN。不,dotnet.exe 命令可用于 SDK 和运行时部署。 SDK 只需添加必要的 CLI 命令和必备库,这些都是从项目中执行“dotnet.exe build”和“dotnet.exe run”所必需的。
  • 在 Windows 10 上的 PowerShell 中工作,但我更喜欢其他答案中建议的 dotnet --info
【解决方案3】:

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

dotnet --info

根据official documentation

  • --version 选项“打印出正在使用的 .NET Core SDK 的版本”。因此,如果未安装 SDK,则不起作用。鉴于...
  • --info 选项“打印出有关 CLI 工具和环境的详细信息,例如当前操作系统、版本的提交 SHA 以及其他信息。”

这是另一篇官方文章,解释了.NET Core versioning 的工作原理。 :)

【讨论】:

  • 令人难以置信的是,这是实际答案。它隐藏在一堆甚至懒得正确阅读问题的人的答案之下。
  • --info 在我的服务器上不工作,而 --version 工作。信息选项给了我:Did you mean to run dotnet SDK commands? Please install dotnet SDK from: http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
  • @ArieKanarie 您可能需要使用Microsoft .NET Framework Repair Tool 进行修复。
【解决方案4】:

您可以检查 dotnet.exe 是否可用:

where dotnet

然后您可以检查版本:

dotnet --version

更新:现在有一种更好的方法可以做到这一点,这在许多其他答案中都有很好的解释:

dotnet --info

【讨论】:

  • 它输出 dotnet CLI 版本,而不是运行时。这是两个不同的东西。安装了 CLI 并不意味着安装了运行时并且版本相同。
  • sshed 到仅安装了运行时的服务器以确认,它不起作用。 See this answer instead.
【解决方案5】:

判断.NET Core 是否安装在Windows 上的假人方法之一是:

  • Windows + R
  • 输入cmd
  • 在命令提示符下,键入dotnet --version

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

【讨论】:

  • 请参阅comment above 以获得相同的答案:它优于 dotnet CLI 版本,而不是运行时......这是两个不同的东西。安装了 CLI 并不意味着安装了运行时并且版本相同
  • Nitpcing,但你不能有一个没有安装运行时的 CLI。所以如果你有一个 CLI,你会有 一些 运行时,只是它可能是一个完全不同的版本。
  • @omajid 不确定您在说什么 CLI。我在回答中提到的 CLI 是 Windows 10 x64 上的默认命令提示 CLI,无需特殊安装即可安装/可用
  • 这不是问题的答案。
  • @Jammer 我建议你提供edit 建议
【解决方案6】:

(1) 如果您在 Window 系统上。

打开命令提示符。

 dotnet --version

(2) 如果你在 Linux 系统上运行以下命令。

dotnet --version

dotnet --info

【讨论】:

  • type dotnet --version - 不适用于 Windows 10。dotnet --version 可以。你确定你的答案还是type 是一个错字?这两个 linux 命令都适用于我的 Win 10。
  • @Aditya 同意认为type 是给读者的指令,而不是命令的一部分。我已经编辑了帖子以匹配。
  • 是的,这是一条指令。
【解决方案7】:

我主要使用 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 Hosting Pack(无 SDK)的服务器上,结果如下。没有 SDK,运行时是 2.0.3。

Microsoft .NET Core Shared Framework Host

Version  : 2.0.3
Build    : a9190d4a75f4a982ae4b4fa8d1a24526566c69df

干杯!

【讨论】:

    【解决方案8】:

    .NET Core SDK 2.1 (v2.1.300) 可以使用以下命令:

    要列出所有已安装的 .NET Core SDK,请使用:dotnet --list-sdks

    要列出所有已安装的 .NET Core 运行时,请使用 dotnet --list-runtimes

    (在撰写本文时在 Windows 上测试,2018 年 6 月 3 日和 2018 年 8 月 23 日再次测试)

    截至 2018 年 10 月 24 日的更新:更好的选择现在可能是终端或 PowerShell 窗口中的dotnet --info,正如其他答案中已经提到的那样。

    【讨论】:

    • 我们都可以学习。很想知道投反对票的原因。也许在您投反对票时发表评论?
    • 我没有投反对票,但我推测这可能是因为您提到了“.NET Core SDK 可用的命令”,而问题是“我想检查没有 SDK 的服务器”。如果您确定在安装 only runtime 时上述哪些命令有效,您的答案将会得到改进。
    • @ToolmakerSteve 是的,这可能就是重点。不过,我没有一个没有 SDK 的环境,也不想那么长地删除它....不过,谢谢您的评论。非常感谢。
    【解决方案9】:

    在windows上,你只需要打开命令提示符并输入:

    dotnet --version
    

    如果安装了 .net 核心框架,您将获得当前安装的版本

    看截图:

    【讨论】:

    • 这会给你 SDK 版本,而不是运行时版本
    【解决方案10】:

    您可以通过终端查看当前安装了哪些版本的 .NET Core SDK。打开终端并运行以下命令。

    dotnet --list-sdks
    

    【讨论】:

      【解决方案11】:

      运行此命令

      dotnet --list-sdks
      

      【讨论】:

      • dotnet --list-runtimes 用于安装的运行时
      【解决方案12】:
      dotnet --info
      

      dotnet --version
      

      在您的 CMDTerminal 上写入上述命令。然后它会显示如下

      或者

      【讨论】:

        【解决方案13】:

        或者你也可以看看里面

        C:\Program Files\dotnet\sdk

        【讨论】:

          【解决方案14】:

          可能是 .NET Core 已安装但未添加到 PATH 您的操作系统或用户配置文件的变量。运行 dotnet 命令可能不起作用。作为备选, 您可以检查 .NET Core 安装文件夹是否存在。

          如果您在灌输过程中没有更改它,它会安装到标准文件夹中

          • dotnet 可执行文件C:\program files\dotnet\dotnet.exe

          • .NET SDK C:\program files\dotnet\sdk\{version}\

          • .NET 运行时C:\program files\dotnet\shared\{runtime-type}\{version}\

          有关更多详细信息,请查看 .NET 文档中的 How to check that .NET Core is already installed 页面

          【讨论】:

            【解决方案15】:

            此方法仅适用于 Windows,可能有点矫枉过正。

            function Get-InstalledApps {
              [CmdletBinding(SupportsShouldProcess=$false)]
              Param ([Parameter(Mandatory=$false, ValueFromPipeline=$true)] [string]$ComputerName=$env:COMPUTERNAME,
                     [Parameter(Mandatory=$false, ValueFromPipeline=$false)] [System.Management.Automation.PSCredential]$Credential)
            
              Begin { Write-Verbose "Entering $($PSCmdlet.MyInvocation.MyCommand.Name)" }
            
              Process {
                $HKEY_LOCAL_MACHINE=2147483650
                $Results=@()
            
                if ($Credential -eq $null) { $Reg=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$ComputerName) }
                else { $Reg=Get-WmiObject -Namespace "root\default" -List "StdRegProv" -ComputerName $ComputerName -Credential $Credential }
            
                $RegPath=@("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
                if ([IntPtr]::Size -ne 4) {
                  $RegPath+="SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
                }
            
                for ($i=0; $i -lt $RegPath.Count; $i++) {
                  if ($Credential -eq $null) {
                    $RegKey=$Reg.OpenSubKey($RegPath[$i])
                    $InstallKeys=$RegKey.GetSubKeyNames()
                    $RegKey.Close()
                  }
                  else { $InstallKeys=$Reg.EnumKey($HKEY_LOCAL_MACHINE,$RegPath[$i]) | Select-Object -ExpandProperty sNames }
                  $InstallKeys=@($InstallKeys)
            
                  for ($j=0; $j -lt $InstallKeys.Count; $j++) {
                    if ($Credential -eq $null) {
                      $AppKey=$Reg.OpenSubKey(($RegPath[$i]+"\\"+$InstallKeys[$j]))
                      $Result=New-Object -Type PSObject -Property @{ComputerName=$ComputerName;
                                                                    DisplayName=$AppKey.GetValue("DisplayName");
                                                                    Publisher=$AppKey.GetValue("Publisher");
                                                                    InstallDate=$AppKey.GetValue("InstallDate");
                                                                    DisplayVersion=$AppKey.GetValue("DisplayVersion");
                                                                    UninstallString=$AppKey.GetValue("UninstallString")}
                      $AppKey.Close()
                    }
                    else {
                      $Result=New-Object -Type PSObject -Property @{ComputerName=$ComputerName;
                                                                    DisplayName=$Reg.GetStringValue($HKEY_LOCAL_MACHINE,($RegPath[$i]+"\"+$InstallKeys[$j]),"DisplayName").sValue;
                                                                    Publisher=$Reg.GetStringValue($HKEY_LOCAL_MACHINE,($RegPath[$i]+"\"+$InstallKeys[$j]),"Publisher").sValue;
                                                                    InstallDate=$Reg.GetStringValue($HKEY_LOCAL_MACHINE,($RegPath[$i]+"\"+$InstallKeys[$j]),"InstallDate").sValue;
                                                                    DisplayVersion=$Reg.GetStringValue($HKEY_LOCAL_MACHINE,($RegPath[$i]+"\"+$InstallKeys[$j]),"DisplayVersion").sValue;
                                                                    UninstallString=$Reg.GetStringValue($HKEY_LOCAL_MACHINE,($RegPath[$i]+"\"+$InstallKeys[$j]),"UninstallString").sValue;}
                    }
                    if ($Result.DisplayName -ne $null) { $Results+=$Result }
                  }
                }
                if ($Credential -eq $null ) { $Reg.Close() }
                $Results
              }
            
              End { Write-Verbose "Exiting $($PSCmdlet.MyInvocation.MyCommand.Name)" }
            }
            
            $NetSDK=Get-InstalledApps | Where-Object { $_.DisplayName -like "*.NET Core SDK*" } | Sort-Object -Property DisplayVersion -Descending | Select-Object -First 1
            $NetHost=Get-InstalledApps | Where-Object { $_.DisplayName -like "*ASP.NET Core*" } | Sort-Object -Property DisplayVersion -Descending | Select-Object -First 1
            $NetSDK
            $NetHost
            

            【讨论】:

              【解决方案16】:

              查看C:\Program Files\dotnet\shared\Microsoft.NETCore.App 以查看哪些版本的运行时在其中有目录。 Source.

              这里的很多答案都将 SDK 与 Runtime 混淆了,它们是不同的。

              【讨论】:

                【解决方案17】:

                在所有其他答案之后,这可能很有用。

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

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

                【讨论】:

                • 我用的是 Visual Studio 2017。YMMV。
                【解决方案18】:

                你可以使用 运行 > 命令 > dotnet --version

                【讨论】:

                  【解决方案19】:

                  在 Windows 上,我检查了注册表项:

                  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v5.0\5.0.12

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-11-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-02-20
                    • 2012-05-29
                    • 2010-09-16
                    • 2014-10-21
                    相关资源
                    最近更新 更多