首页 > 解决方案 > 如何从 powershell 创建 IIS 网站以托管 .net core 2.0 应用程序

问题描述

预期结果

IIS 正确托管我的应用程序,当我导航到我的应用程序的 url(例如:blabla/swagger)时,我看到描述我的应用程序的 swagger UI

问题

当我尝试导航到我的应用程序时,它说:

HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.

信息

我在 .net core 2.0 中构建了一个应用程序,我能够让它通过由 Kestrel 托管的 Visual Studio 运行。但是,我需要将此应用程序部署到不同的服务器,并且由于 Kestrel 不支持主机名,因此我需要将其托管在 IIS 中。当我让它通过 Kestrel 运行时,我能够正确访问它并通过导航到 url/swagger 地址,我能够看到描述应用程序的正确的招摇页面。我的应用程序正在从 Visual Studio发布。这意味着在其发布的文件夹中有应用程序需要的所有 dll。它作为依赖于框架的应用程序发布,而不是独立的应用程序,但这无关紧要。

如何复制问题

由于有一天我需要将这一天托管在 Docker 容器内的 IIS 中,因此我正在尝试使用 PowerShell 脚本将其托管在 IIS 中。我为使其托管在 IIS 中所做的工作是:

New-Website -Name 'myTestApp' -force -Port 8080 -PhysicalPath
'C:\Users\myUser\Desktop\Docker\PublishOutput' -ApplicationPool 'MyAppPoolTest'

其中C:\Users\myUser\Desktop\Docker\PublishOutput是 Visual Studio 发布应用程序的已发布文件夹的路径。提前致谢!

编辑:

这是Visual Studio在发布时生成的web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Friss.CaseApi.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>
<!--ProjectGuid: 313d542d-7676-4440-ae1b-22c6071f4309-->

错误页面是:

在此处输入图像描述

错误2:

在此处输入图像描述

标签: powershelliis.net-core

解决方案


由于错误代码是0x80070005并且配置错误是“由于权限不足而无法读取配置文件”,您应该授予IIS_IUSRSPublishOutput文件夹的权限。

C:\Users\someone在 IIS 上托管用户文件夹 ( ) 中的文件内容而忘记授予此类权限是一个典型的错误。

有关 IIS 问题的其他典型 ASP.NET Core,请阅读我的博文


推荐阅读