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

5lwkijsr  于 2023-08-05  发布在  .NET
关注(0)|答案(4)|浏览(158)

我正在尝试在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


了解任何变化
我会很高兴的任何想法和建议,如何解决这个问题。提前感谢!

egdjgwm8

egdjgwm81#

所以我花了比我愿意承认的更长的时间才找到这个问题的原因。但对于任何人谁可能在未来绊倒这是什么帮助了我。
我将项目托管在IIS中所需站点下的两个子文件夹中。So Desired_Site -> Subfolder 1-> Subfolder 2->实际项目文件。我的猜测是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文件到Subolder 1中的web.config(相应地调整路径),一切都按预期工作。如果您遇到同样的问题,请确保您尝试托管的文件夹结构尽可能平坦。

8aqjt8rx

8aqjt8rx2#

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

af7jpaap

af7jpaap3#

如果宿主在IIS的子文件夹中,请确保“转换为应用程序”!这是我的问题。我不需要修改任何东西。

fcg9iug3

fcg9iug34#

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

相关问题