无法在Windows Server 2016上运行.NET Core 2.1(.1)应用程序

12

我正在尝试在我的Windows Server 2016实例上运行.NET Core应用程序。在我的Windows 10机器上,它可以正常构建/运行。

首先,我执行dotnet publish,然后将发布的站点复制到Windows Server实例。我遵循了此指南并安装了hosting bundle最新的SDK(2.1.3

但是,当我尝试运行dotnet myapp.dll时,会出现以下错误消息:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.All', version '2.1.1' was not found.
  - Check application dependencies and target a framework version installed at:
      C:\Program Files\dotnet\
  - Installing .NET Core prerequisites might help resolve this problem:
      http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
  - The .NET Core framework and SDK can be installed from:
      https://aka.ms/dotnet-download
  - The following versions are installed:
      2.1.0 at [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
我清楚地看到,确实只有一个版本为2.1.0的Microsoft.AspNetCore.All位于Program Files\dotnet\shared中。我该如何获取正确的2.1.1版本?感谢任何指导。

你尝试过使用 dotnet publish --self-contained 发布吗? - DavidG
我没有这样做,这解决了我的问题,而且我也打算手动部署。太好了! - Ropstah
更新:我最终尝试了其他方法,并安装了最新的软件包。开源万岁。 - Ropstah
好的,接受答案中提供的链接指向SDK v2.1.1的预览版本。实际版本仍未发布(仍然停留在发布过程中)。但如果您正在使用v2.1,那么就没问题了。 - DavidG
该链接显示了refs/heads/release/2.1.3xx上的.NET SDK,我从中获取了301版本。MSFT网站显示了2.1.300的.NET SDK... - Ropstah
显示剩余2条评论
3个回答

11

太好了,我找不到这个原始构建! - Ropstah
@DavidG的方法使用了--self-contained构建,它是有效的。然而,我安装了这个答案中的包,因为我更喜欢这种方式,我不需要改变我的开发环境来使其工作。我必须重新启动服务器才能使更改生效,仅仅重新启动IIS服务是不起作用的。 - Ropstah
1
了解这些注意事项也是很重要的。 - Alternatex

4
看起来发布Microsoft.AspNetCore.All软件包时出了一些问题,而且它不会随着VS更新/Core SDK安装自动安装。至少对我来说是这样的。nuget软件包也是10小时前加入的,下载量为0。因此,默认情况下我们仍然被困在2.1.0版本。为了解决这个问题,我首先检查了ASP.NET Web应用程序模板使用了什么(它们不断更改默认值,因此如果您正在更新旧项目,则始终可以检查默认模板中的更改)。对我来说,解决方法是从.csproj文件中的标记中删除Version参数,就像默认模板中所做的那样。原始内容如下:
<ItemGroup>
   <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.1" />
</ItemGroup>

修改后:

在修改后:

<ItemGroup>
   <PackageReference Include="Microsoft.AspNetCore.All" />
</ItemGroup>

这将基本上解析为最新安装的版本,即现在的2.1.0。很可能在以后的更新中会安装2.1.1。您也可以尝试手动安装最新的软件包,但我建议在可能的情况下还是使用默认设置。这样未来的更新就不太可能破坏我的系统。

目前我已经通过发布 --self-contained 来解决了这个问题。然而,由于该软件包已经更新(或者至少已经被下载了360次),我将尝试恢复到非自包含的发布方式... - Ropstah
非常感谢。我刚刚在我的MVC Core 2.1.0项目上运行了“Update-Package”,所有与Core相关的包都更新到了2.1.1。唯一一个在开发中出现问题的是“Microsoft.AspNetCore.All”,您提供的删除版本号的解决方案为我解决了这个问题,而无需依赖于追赶非RTM日常构建。 - ProfK

2

你有两个选项:

  1. Install the 2.1.1 framework on the server (as mentioned in another answer)

  2. Publish your app with all the required assets. You can do this with the following command:

    dotnet publish --self-contained
    

你的第二个方法完美地运行了。我选择了第一个。谢谢! - Ropstah
1
@Ropstah 请确保不要在服务器上安装 SDK 的预览版本,因为最终版本可能尚未发布。 - DavidG
你能详细说明一下“服务器”吗?开个玩笑,但这是一个测试服务器。然而,我显然更愿意让它继续运行并在完成后安装最终版本,而不是重新安装。我猜这应该不会有任何问题,对吧? - Ropstah
这是测试版软件,完全由您决定!最终版本目前正在.NET团队准备中,可能需要几个小时或一天左右。我听说它卡住了... - DavidG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接