在IIS中托管.net Core应用程序。无法加载配置。属性'processPath'是必需的

时间:2020-06-04 12:43:43

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

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

当我尝试调用一个可用的端点(通过前端或手动)时,收到HTTP 500错误(内部服务器错误。您正在寻找的资源有问题,并且无法显示。)< / p>

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

“无法加载配置。异常消息:属性'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>

已安装核心Hosting Bundle。完全重启在此服务器上并不可行(或者至少我想避免这种情况)。因此,我跑了

net stop was /y
net start w3svc

了解所做的任何更改。

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

2 个答案:

答案 0 :(得分: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(相应地调整路径),一切正常。 如果您遇到相同的问题,请确保要尝试托管的文件夹结构尽可能平坦。

答案 1 :(得分:0)

另一个缺失的配置导致了这个错误,直到我添加它:环境变量 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 中(与您的站点对应的位置)。