【问题标题】:asp.net core 2.1 target .Net Framework and run on IIS without hosting bundleasp.net core 2.1 以 .Net Framework 为目标并在 IIS 上运行,无需托管包
【发布时间】:2023-04-03 09:28:01
【问题描述】:

我有一个目标框架为 .Net Framework 4.6.1 的 .NET Core 2.1 应用程序。我想在 IIS 上托管它,但我不想安装 .net 核心托管包。是否可以在不安装 .Net Core Hosting Bundle 的情况下在 IIS 上运行此应用程序?我尝试在本地 IIS 上运行此页面,但我得到:

HTTP 错误 500.19 - 内部服务器错误 无法访问请求的页面 访问,因为该页面的相关配置数据是 无效。

大多数答案建议安装 .Net Core Hosting Bundle 来修复此错误,但由于我不允许在远程服务器上安装它,我想知道是否有其他方法?

【问题讨论】:

  • 如果事实是“因为我不允许在远程服务器上安装它”,那么你根本不能使用 ASP.NET Core,并且必须 1) 找到安装服务器包的方法, 2) 或切换到其他技术,如 ASP.NET 4.x。没什么好讨价还价的。
  • ASP.NET Core 可以独立部署并通过Http.Sys 运行,因此这可能是一个替代选项,但要将 IIS 用作反向代理,您必须 i> 安装托管包。在这件事上别无选择。

标签: c# asp.net iis asp.net-core iis-7


【解决方案1】:

如果你的目标是在你的包中引用 asp.net core 2.1(如标题所示),那么你基本上是在定位你需要在你的机器上安装的运行时框架。

【讨论】:

  • 我创建了“ASP.NET Core Web 应用程序”并在下拉列表中选择了“.Net Framework”,在第二个下拉列表中我选择了“ASP.NET Core 2.1”。在项目属性中,我可以看到目标框架:.Net Framework 4.6.1
  • 您仍然需要安装托管包,并且您的 IIS 应用程序池必须以“无托管代码”的方式运行。
【解决方案2】:

使用面向 .NET Framework 的 ASP.NET Core 2.1 创建了一个 MVC 应用程序,并将该应用程序发布到一个文件夹。

然后,我设法将应用程序托管在具有集成管道和 .NET CLR v4.0 的应用程序池的 IIS 中,如下所示:

重要提示:接下来您需要确保应用程序池身份用户 (IIS AppPool\{ApplicationPool Name} 对您的发布文件夹具有 Read and execute 权限。

如果您检查已发布应用的 web.config,您会注意到引用了 AspNetCoreModule 处理程序。这个AspNetCoreModule 是在 IIS 中托管应用程序所必需的,因为它充当反向代理。所以你需要安装 ASP.NET Core 托管包来安装这个模块。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module?view=aspnetcore-2.1

【讨论】:

  • 我将页面设置为使用应用程序池 ASP.NET v4.0。我向“所有人”组添加了权限,只是为了确保这不是权限问题,但仍然是同样的错误。有什么办法可以将您的解决方案添加到 github?所以我可以在我的环境中测试它吗?
  • @FCin 请检查您的系统事件查看器是否有任何错误。
  • 没有错误,但是当我查看 IIS -> 基本设置 -> 测试设置时,我得到“无效的应用程序路径”。我的路径指向“web.config”文件。
  • 所以我必须安装托管包
  • 池应该仍然不使用托管代码。在 .NET Framework 上运行的是 Kestrel,blog.lextudio.com/…,这意味着 IIS 工作进程可以不受 .NET Framework 的限制。
猜你喜欢
  • 2021-09-25
  • 2019-03-18
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 2018-02-17
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多