如何从Powershell创建IIS网站以托管.net Core 2.0应用,错误0x8007000d

时间:2018-06-29 08:59:44

标签: powershell iis asp.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

我是否以错误的方式设置了web.config?

2 个答案:

答案 0 :(得分:0)

查看文档here

  1. 您需要发布您的网站,然后将IIS网站指向已发布的文件夹
  2. 应用程序池必须设置为No Managed code
  3. 应用程序池标识用户IIS AppPool\{AppPoolName}必须对已发布的网站文件夹具有读取权限

答案 1 :(得分:-2)

找到了解决方案,

系统需要dotnet核心Windows托管软件包。该捆绑软件将安装.NET Core运行时,.NET Core库和ASP.NET Core模块。

文档:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.1&tabs=aspnetcore2x

直接下载到解决了我的问题的.netcore 2.0.6捆绑软件:https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/DotNetCore.2.0.6-1-WindowsHosting.exe