【问题标题】:Hosting a .net Core application in IIS. Could not load configuration. Attribute 'processPath' is required在 IIS 中托管 .net Core 应用程序。无法加载配置。需要属性“processPath”
【发布时间】:2020-09-23 10:54:45
【问题描述】:

我正在尝试在 IIS 中托管一个 .net Core API。 当我让它在 Visual Studio 中运行时,一切正常。对于部署,我首先将项目发布到一个文件夹,将内容复制到所需位置并在 IIS 中创建一个应用程序。它设置为使用与“无托管代码”配置的应用程序池。

当我尝试调用一个可用的端点(通过前端或手动)时,我收到一个 http 500 错误(内部服务器错误。您要查找的资源有问题,无法显示。)

我在服务器上找不到任何有意义的日志。只有在事件查看器中才能找到错误事件。

“无法加载配置。异常消息:需要属性‘processPath’。”

现在我不确定为什么会这样,因为项目的 Web.config 中的 processPath 属性肯定存在,并且在发布时是这样生成的。它看起来像:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApplication.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>

核心主机包已安装。在此服务器上完全重新启动并不可行(或者至少我想避免它)。出于这个原因,我跑了

net stop was /y
net start w3svc

了解所做的任何更改。

对于如何解决此问题的任何想法和建议,我都会很高兴。 提前非常感谢!

【问题讨论】:

标签: asp.net-core iis .net-core


【解决方案1】:

因此,我花了比我愿意承认的时间更长的时间来找到这个问题的原因。 但是对于将来可能会遇到此问题的任何人来说,这对我有帮助。

我将项目托管在 IIS 中所需站点下的两个子文件夹中。 所以 Desired_Site -> Subfolder1 -> Subfolder2 -> 实际项目文件。 我的猜测是 IIS 无法处理位于此位置的 web.config 文件。 当我搬家时

    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApplication.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>

从项目 web.config 文件到 Subolder1 中的 web.config(相应地调整路径),一切都按预期工作。 如果您遇到同样的问题,请确保您尝试托管的文件夹结构尽可能平坦。

【讨论】:

    【解决方案2】:

    这个错误发生在我身上,因为我不小心将 azure 虚拟路径映射设置为“目录”,而它应该是“应用程序”

    【讨论】:

      【解决方案3】:

      在我添加之前,另一个缺少的配置对我造成了这个错误:环境变量 ASPNETCORE_ENVIRONMENT

      <system.webServer>
        <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath=".\MyApplication.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" >
          <environmentVariables>
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
          </environmentVariables>
        </aspNetCore>
      </system.webServer>
      

      您可以将其放在 web.config 中,但如果您从 Visual Studio 发布新版本的 Web 应用程序,它将被删除。为避免这种情况,请将其放在 applicationHost.config 中(与您的站点对应的位置)。

      【讨论】:

        猜你喜欢
        • 2020-11-19
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多