【问题标题】:IIS not using correct version for .NET Core - how to manage?IIS 没有为 .NET Core 使用正确的版本 - 如何管理?
【发布时间】:2018-09-28 12:11:28
【问题描述】:

我正在尝试运行一个本地发布的应用程序,它会立即引发异常:

启动应用程序时出错。

.NET Core 4.6.26725.06 X86 v4.0.0.0 | Microsoft.AspNetCore.Hosting 版本 2.1.1-rtm-30846 |微软视窗 10.0.16299 |需要帮助吗?

这让我相信 IIS 使用的是 2.1.1-rtm-30846 版本,即使我刚刚从网站下载了最新的 2.1.4 版本。

但是,我只能获取有关dotnet 使用的SDK 的信息,而不是Runtime。

虽然使用dotnet --info,但我可以获得已安装的SDK 版本列表(输出如下)。但这也只显示列出的2.1.4 版本。

如何管理 IIS 用于 .NET core runtime 的版本?

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.0-preview1-final [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.0-rc1-final [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.0-preview1-final [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.0-rc1-final [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 1.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.0-preview1-26216-03 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.0-rc1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

【问题讨论】:

  • 读取dotnet publish输出文件夹下的manifest文件docs.microsoft.com/en-us/dotnet/core/tools/…
  • 似乎没有清单文件。我看到可以为dotnet publish 指定一个--manifest 参数,但这似乎被用作输入?
  • 或者我应该说runtimeconfig.json natemcmaster.com/blog/2017/12/21/netcore-primitives/…
  • 我不明白你想说什么。我在输出文件夹中找不到任何清单文件...应该可以在没有runtimeconfig.json 的情况下运行它,对吧?
  • 对于依赖于框架的部署,我认为你不能没有runtimeconfig.json,因为这是dotnet 命令用来初始化环境(又名运行时)的。这也决定了应该使用哪个版本的运行时(因此,IIS 没有扮演那个角色)。

标签: iis runtime asp.net-core-2.1


【解决方案1】:

这实际上与 IIS 没有任何关系,因为 IIS 只是充当反向代理。问题是运行时版本选择由于某种原因未能使用最新安装的 .NET Core 运行时版本。你可以阅读更多关于这个过程是如何工作的here,但总结一下:

使用最新安装的补丁版本,除非...

  1. 如果有指定特定版本的 global.json 文件
  2. 指定的目标框架限制了主要版本。例如,如果您的目标是 netcoreapp2.0,那么即使您安装了 2.1 运行时,也会使用最新的 2.0 运行时。
  3. 该应用被部署为独立的,在这种情况下,它将始终使用发布时使用的运行时。

首先,确保您没有指定运行时版本的 global.json 文件。该文件可能存在于项目的根目录或任何包含目录中,并且仍然有效。接下来,检查您的项目所针对的 .NET Core 版本,并确保它是 netcoreapp2.1,而不是 netcoreapp2.0。

【讨论】:

  • 1. no global.json 文件存在(not 在任何子目录中也是如此)。 2.目标框架设置为netcoreapp2.1。 3. 正是因为这个原因以及,我尝试部署为独立的,但这产生了同样的异常......
  • 它变得更奇怪了,我卸载(并从 %ProgramFiles%\dotnet\shared 手动删除)所有以前的 .net core 运行时(只留下 2.1.3 和 2.1.4 但出于某种原因 IIS继续使用2.1.1-rtm-30846
猜你喜欢
  • 2018-12-10
  • 2020-01-29
  • 1970-01-01
  • 2017-05-09
  • 2011-03-14
  • 2019-05-19
  • 2014-01-17
  • 2015-01-08
  • 1970-01-01
相关资源
最近更新 更多