【问题标题】:Running MVC6 Beta8 app on IIS Express在 IIS Express 上运行 MVC6 Beta8 应用程序
【发布时间】:2015-10-15 20:35:51
【问题描述】:

我刚刚更新到 MVC6 Beta8。在修复代码以再次编译几个小时后,我遇到了应用程序无法在 IIS Express 下运行的问题。我收到此错误消息:

[TypeLoadException:无法从程序集“Microsoft.Dnx.Host.Clr,版本=1.0.0.0,文化=中性,PublicKeyToken=adb9793829ddae60”加载类型“Microsoft.Dnx.Host.Clr.EntryPoint”。] System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags, PolicyLevel policyLevel, Exception appDomainCreationException) +303

[HttpException (0x80004005):无法从程序集“Microsoft.Dnx.Host.Clr,版本=1.0.0.0,文化=中性,PublicKeyToken=adb9793829ddae60”加载类型“Microsoft.Dnx.Host.Clr.EntryPoint”。 ] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +9922864 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文)+90 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +261

我知道托管架构发生了变化。但这是否意味着我们不能再使用 IIS express 或者只是更新或配置更改的问题?

【问题讨论】:

  • 你用谷歌搜索过吗? one two & original source 需要新的 webtoolextensions/dnvm(链接在那个问题上)。顺便说一句,如果你还没有,你应该关注 github.com/aspnet/announcements。此外,您现在应该使用dnx kestrel 运行。
  • @BradChristie,是的,我也找到了这两个帖子和公告。他们陈述了问题,但没有陈述解决方案(在东部,我在那里看不到,可能遗漏了一些明显的东西)。如何为 Visual Studio 运行 dnx kestel?

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


【解决方案1】:

升级到 beta8 时,您需要考虑对 IIS/IIS Express 托管模型的一些重大更改。

在您的 project.json 文件中,从依赖项中删除这些:

  • “Microsoft.AspNet.Server.IIS”
  • “Microsoft.AspNet.Server.WebListener”

将以下内容添加到您的依赖项中:

  • “Microsoft.AspNet.Server.Kestrel”
  • "Microsoft.AspNet.IISPlatformHandler

最后,在您的 Startup.cs 文件中,将以下内容添加到 Configure 方法中:

  • app.UseIISPlatformHandler();

(我假设app 是您的IApplicationBuilder 的名称,您可以相应调整)。

这会将新的 IISPlatformHandler 添加到管道并将流量定向到 Kestrel 服务器,从而绕过 IIS 和旧的 Helios dnx 主机。

您可以在Github 上的公告中阅读此更改

【讨论】:

  • 这样做了,但仍然遇到同样的问题。您对 project.json 上的“命令”部分有什么看法?谢谢
  • 我不得不将我的网络命令从“Microsoft.AspNet.Hosting --config hosting.ini”切换到“Microsoft.AspNet.Server.Kestrel”,然后这个答案才有效。
  • 如果这仍然不起作用。检查 wwwroot 中的 web.config 文件。 system.webServer 部分应仅包含 httpPlatformHandler 处理程序及其配置。其他处理程序将阻止 IISExpress 启动。您可以创建一个新的空白项目来查看 vanilla web.config 文件。
  • 或者,您可以从项目中完全删除 web.config 文件。将在编译时生成一个“vanilla”web.config,其中仅包含将请求路由到 Kestrel 所需的处理程序。
  • 别忘了dnu restore
【解决方案2】:

这是我解决问题的方法:

  1. 从以下位置下载并安装最新的 WebToolsExtentions http://www.microsoft.com/en-us/download/details.aspx?id=49442
  2. 创建一个新的 ASP.NET5 Web 应用程序项目
  3. 将文件从旧项目复制到新项目

我不知道如何修改现有项目。

【讨论】:

  • 对。仅仅复制文件是行不通的 - Beta 8 中有许多重大更改,并且并非所有更改都已正确记录。例如,以前模板中的 new ConfigurationBuilder(appEnv.ApplicationBasePath) 将不再起作用,您必须改用 SetBasePath()。或者当有外键属性时导航属性的工作方式不同(必须添加 [ForeignKey] 声明。
  • 在通过控制台升级我的版本后挣扎了好几天。这个答案立即修复了它。感谢分享
【解决方案3】:

升级到 beta 8 后我遇到了同样的问题,并通过从 project.json 中删除以下依赖项解决了这个问题:

"Microsoft.AspNet.Server.IIS": "1.0.0-beta7"
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta7"

并添加以下依赖项:

"Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8"

我还将所有项目引用从beta7更新为beta8

希望这会有所帮助。

【讨论】:

    【解决方案4】:

    这是我的方式。有人可以找到有用的东西。我将此行添加到我的 project.json 中:

    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta8",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8",
    

    我更改了以下命令:

    "commands": {
        "web": "Microsoft.AspNet.Hosting --config hosting.ini",
    },
    

    到这里:

    "commands": {
        "web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000",
        "kestrel": "Microsoft.AspNet.Server.Kestrel",
    },
    

    然后dnu restore

    现在您可以使用dnx webdnx kestrel 命令运行您的asp.net 应用程序。此处描述了差异:https://github.com/aspnet/Home/wiki/Servers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-29
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2021-08-26
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多