.NET Core - 自包含部署无法工作

7
我有一个.NET Core web应用程序。我正在使用 发布 命令创建一个 自包含部署。它会创建文件并似乎创建了.net core dll,但在 Windows 10上运行IIS时,我仍然需要安装 .NET Core Runtime 才能使其正常工作。安装.NET Core Hosting bundle后,它可以正常运行。
在提问之前,我已经查阅了很多其他帖子,但找不到答案。
默认情况下,IIS会给出以下错误:

HTTP ERROR 500.19 – 内部服务器错误

我的发布命令:
dotnet publish "mydirectory\mywebsite.csproj" --self-contained --framework netcoreapp2.1 -r win10-x64 -c Release

csproj看起来像这样:

项目文件如下:

 <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <UserSecretsId>aspnet-mywebsite-656GASF8-B9H4-5963-1038-5D735B609E15</UserSecretsId>
      <RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
  </PropertyGroup>

这里是已发布的文件。

输入图像描述

我想也许'l1-1-0'部分可能是错误的框架版本,但我的dotnet版本是2.1.500。

输入图像描述

请问我需要做什么来使它工作?


安装了.NET Core托管包后,它可以正常工作。 那你为什么会问这个问题?答案很明显。 - Lex Li
2
@Lex Li - 因为自包含安装应该同时安装框架,以免需要单独安装。我认为这个帖子是合法且经过良好研究的,所以对它进行负评价有些过分了。 - JsAndDotNet
1
很不幸,是你没有理解这个主题。Microsoft定义了什么是“自包含”的(所以ASP.NET Core模块并不在其中设计),这正是你观察到的。除非你有能力强迫Microsoft改变主意,否则这个问题就没有答案。https://blog.lextudio.com/the-horrible-story-of-publishing-net-core-web-apps-for-beginners-6121662dd8c4 - Lex Li
1
那么请告诉我我误解了什么 - 即使在阅读了https://learn.microsoft.com/en-us/dotnet/core/deploying/以及许多其他文档之后。如果您仍然需要安装框架,那么自包含安装的意义是什么? - JsAndDotNet
1
自我部署的关键点是:1)仅在IIS中下载ASP.NET Core模块(忽略捆绑的运行时)。2)您可以决定将哪个运行时与您的Web应用程序一起发布,而不是使用单独的安装程序。这是否是一个好的设计,您可以向Microsoft提出质疑。这些都隐含在Microsoft文档中,并且只能通过实验来找出。 - Lex Li
显示剩余2条评论
1个回答

11

Lex Li的评论/博客文章中包含了答案。我在这里详细描述一下,试图帮助其他人避免因为这个简单的误解而浪费几天时间。

一个自包含部署确实包含了运行时, 但它不包括你从.net下载页面下载的 Runtime & Hosting Bundle中提供的 ASP.NET Core模块 for IIS

所以如果你要部署到IIS上,即使是自包含部署,你也需要运行Runtime & Hosting Bundle安装程序。

自包含部署只意味着应用程序将使用与应用程序捆绑在一起的 .NET Core 运行时,而不是机器上安装的任何版本。


1
我在官方文档中找不到这个信息。他们确实应该添加进去。 - Norcino
从这些信息中,我将“自包含”更改为“框架依赖”,同时将IIS 8.0 AppPool设置为“无托管代码”,成功地在Windows 2012服务器上运行ASP.NET 5 Web应用程序。<3 - Zachary Scott

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