我知道对于旧版本的.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
干杯!
这种方法只能在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
问得好,答案并不简单。没有“显示所有。net核心版本”命令,但还是有希望的。
编辑:
我不确定它是什么时候添加的,但是info命令现在在输出中包含了这个信息。它会打印出已安装的运行时和sdk,以及其他一些信息:
dotnet——信息
如果你只想看到sdk: dotnet——list-sdks
如果你只想查看已安装的运行时:dotnet——list-runtimes
我用的是Windows系统,但我猜这在Mac或Linux上也适用。
此外,您可以参考. net核心下载存档来帮助您破译SDK版本。
旧的信息:
这一点以下的所有信息都是旧信息,相关性较低,但可能仍然有用。
请参阅已安装的运行时:
打开C:\Program Files\dotnet\shared\ Microsoft.NETCore。Windows资源管理器中的应用程序
参见已安装的sdk:
在Windows资源管理器中打开C:\Program Files\dotnet\sdk
(地点来源:开发者博客)
此外,您可以通过在命令提示符处发出这些命令来查看安装的最新运行时和SDK版本:
首先列出的是dotnet最新运行时版本。免责声明:这不再工作,但可能适用于旧版本。
免责声明:显然,此结果可能受到任何全局。Json配置文件。
在macOS上,您可以使用下面的命令检查.net核心版本。
ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/
在Ubuntu或Alpine上:
ls /usr/share/dotnet/shared/Microsoft.NETCore.App/
它将列出带有已安装版本名称的文件夹。