如何从Powershell创建IIS网站以托管.net Core 2.0应用

时间:2018-06-26 13:10:58

标签: powershell iis .net-core

预期结果

IIS正确托管了我的应用程序,当我导航到应用程序的网址(例如blabla / 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地址,就能看到描述该应用程序的正确的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-->

错误页面是:

enter image description here

错误2:

enter image description here

1 个答案:

答案 0 :(得分:1)

由于错误代码为0x80070005,并且配置错误为“由于权限不足而无法读取配置文件”,因此应授予IIS_IUSRS文件夹的PublishOutput权限。

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

有关IIS问题的其他典型ASP.NET Core,请阅读my blog post