面向.NET 4.6.1的ASP.NET Core 2.0应用无法在IIS上托管

时间:2018-08-22 16:25:37

标签: iis asp.net-core

问题

IIS ASP.NET Core模块无法启动ASP.NET Core 2.0应用程序。

浏览器: HTTP错误502.5-进程失败

Windows事件日志:具有物理根“ MACHINE/WEBROOT/APPHOST/AppSite”的应用程序“ C:\inetpub\apps\AppFolder\”无法使用命令行“ C:\inetpub\apps\AppFolder\App.exe”启动进程,ErrorCode =“ { {1}}”。

ASP.NET核心模块日志:已创建日志文件,但为空。


设置

应用:面向.NET Framework 4.6.1的ASP.NET Core 2.0。

服务器:带有IIS 8.5.9600的Windows Server 2012 R2 Standard 6.2.9200。


故事

我们使用Visual Studio 2017中提供的默认项目模板创建了一个空白的MVC Web应用程序。

该应用按照官方规范https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/进行部署。

困惑主要来自以下两个方面:两点

  1. 在Kestrel上通过命令行运行应用程序。
  2. 运行其他应用程序但针对.NET Core 2.0并作为依赖于框架的发布在IIS上完美运行。 但是在这两个应用程序之间:代码库相同,IIS网站和应用程序池相同,我们甚至清空应用程序目录并使用相同的目录。

由于这些问题,唯一的区别似乎是net461应用程序的可执行文件。

我们没有完全控制要部署的Windows Server的权限,但是我们有管理员帐户。当前的假设是问题出在权限之内-可能是AD组策略,防病毒软件阻止了该文件,但我们仍在等待客户端sysadmins的响应。同时,在尝试在我们的开发计算机上设置这些限制时,我们无法复制错误代码“ 0x80004005: 1”。

以下是关于我们在解决问题时尝试过的问题的观点和要点的不完整列表:

  • 初始应用程序(定位为net461)在IIS上可以完美运行 部署到其他服务器(Windows 10企业版,Windows Server 2012 R2数据中心)。
  • 重新安装不同版本的ASP.NET Core / .NET Core:运行时和托管包。
  • 设置对dotnet文件夹的NTFS权限。
  • 将IIS应用程序池标识更改为管理员帐户。
  • 重新启动服务器。
  • 遍历本地组和安全策略。
  • 浏览防病毒设置和日志。
  • 尝试在全新服务器(相同的操作系统,相同的版本)上进行部署。

所有想法/评论都非常感谢。越模糊越好。

编辑:

由于已将其标记为ASP.NET Core 0x80004005的可能重复项,因此我需要指定为什么它不是重复项。

  • 所引用的项目是ASP.NET Core的较旧版本(最近使用 project.json是在2016年)
  • 所引用的项目针对.NET Core,而不是.NET 4.6.1。在此还提到,针对此问题,以.NET Core为目标可在IIS上使用。
  • 所选答案指出他们通过以下方式解决了问题:

      

    事实证明,这是需要安装一些Windows的结果   更新和此问题:

         

    打开Microsoft时缺少api-ms-win-crt-runtime-l1-1-0.dll   Office文件

         

    我没有安装上一期中讨论的版本   进入程序和功能并在Microsoft Visual C ++上进行修复   2015年可再发行。

    但是,Microsoft Visual C ++ 2015 Redistributable的安装是官方安装指南中的步骤之一,并且这里还提到在安装过程中遵循了官方指南。

  • 我们已经看完该帖子,并尝试修复并重新安装Microsoft Visual C ++ 2015 Redistributable运行时组件,但这不能解决问题。

1 个答案:

答案 0 :(得分:0)

如果将来有人偶然发现此帖子:

问题确实出在服务器的防病毒方面。它并没有直接阻止应用程序的可执行文件,而是调用了系统文件夹中的类库。此终止没有引发任何常规警报。

The application "C:\inetpub\apps\AppFolder\App.exe" attempted to load the library "bcrypt.dll" by calling the function "LoadLibraryExW". The operation was blocked and the application terminated.

将MVC空白应用程序切换为完全空白的Hello-World应用程序后,它成功运行。