如何确定是否已在Windows服务器上安装asp.net核心

wel*_*tty 15 .net-core asp.net-core

我正在设置各种Windows服务器来托管asp.net核心应用程序,我需要能够确定他们是否安装了asp.net托管包.

https://docs.asp.net/en/latest/publishing/iis.html#install-the-net-core-windows-server-hosting-bundle说:

"在服务器上安装.NET Core Windows Server Hosting软件包.该软件包将安装.NET Core Runtime,.NET核心库和ASP.NET核心模块.该模块在IIS和Kestrel服务器之间创建反向代理".

我正在设置部署,我需要确保我的服务器已配置好以便运行asp.net核心应用程序.

基本上,我正在寻找一个注册表项或其他方式来告诉我是否应该运行安装程序设置.(就像我们告诉我们是否安装了旧版本的框架一样,就像 https://support.microsoft.com/en-us/kb/318785 早期版本一样)

小智 14

您可以Microsoft .NET Core 1.1.1 - Windows Server HostingHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Updates\.NET Core路径下搜索注册表项,如下面的截图.

在此输入图像描述

您还可以使用PowerShell确定密钥是否存在.

$DotNETCoreUpdatesPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Updates\.NET Core"
$DotNetCoreItems = Get-Item -ErrorAction Stop -Path $DotNETCoreUpdatesPath
$NotInstalled = $True
$DotNetCoreItems.GetSubKeyNames() | Where { $_ -Match "Microsoft .NET Core.*Windows Server Hosting" } | ForEach-Object {
    $NotInstalled = $False
    Write-Host "The host has installed $_"
}
If ($NotInstalled) {
    Write-Host "Can not find ASP.NET Core installed on the host"
}
Run Code Online (Sandbox Code Playgroud)

您可以从如何通过PowerShell确定Windows Server上的ASP.NET Core安装下载示例.

  • 如果未安装,则“ Get-Item -ErrorAction Stop -Path $ DotNETCoreUpdatesPath”将出错,脚本将永远不会完成。该脚本需要被try catch包围才能工作。如果您愿意,我可以编辑答案以包括该答案。 (3认同)
  • 最新版本的框架不适合我 (2认同)

Al*_*kov 11

您可以使用powershell检查托管模块是否已在IIS中注册

在本地的powershell会议上

Import-module WebAdministration
$vm_dotnet_core_hosting_module = Get-WebGlobalModule | where-object { $_.name.ToLower() -eq "aspnetcoremodule" }
if (!$vm_dotnet_core_hosting_module)
{
    throw ".Net core hosting module is not installed"
}
Run Code Online (Sandbox Code Playgroud)

如果你想在远程会话中做替换前2行

Invoke-Command -Session $Session {Import-module WebAdministration}
$vm_dotnet_core_hosting_module = Invoke-Command -Session $Session {Get-WebGlobalModule | where-object { $_.name.ToLower() -eq "aspnetcoremodule" }}
Run Code Online (Sandbox Code Playgroud)

  • 即使安装后,此命令也不会显示该模块。对我来说,这是因为该模块实际上称为“AspNetCoreModuleV2”。 (3认同)

小智 9

如果您安装了 .NET Core CLI,您可以尝试:

dotnet --list-runtimes
Run Code Online (Sandbox Code Playgroud)

这将打印如下内容:

Microsoft.NETCore.App 3.0.0 [c:\program files\dotnet\shared\Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.0 [c:\program files\dotnet\shared\Microsoft.NETCore.App]

参考:微软文档

  • 机器上有运行时并不意味着已安装 IIS 模块 (4认同)