k web对应的命令如下:

"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:8001"

其中Microsoft.AspNet.Hosting是OWIN Host,与用k kestrel时是一样的。Microsoft.AspNet.Server.WebListener是OWIN Server。

运行k web需要在project.json中添加引用:

"Microsoft.Framework.DependencyInjection": "1.0.0-beta2",
"Microsoft.Framework.DependencyInjection.Autofac": "1.0.0-beta3-10754"

不然会出现错误:

Missing method Microsoft.Framework.DependencyInjection.ServiceCollectionExtensions::AddContextAccessor

k web最终出现的错误是:

System.DllNotFoundException: httpapi.dll

那原因是什么呢?

Microsoft.AspNet.Server.WebListener虽然是一个.NET托管程序,是被 Microsoft.AspNet.Server.WebListener.ServerFactory.Initialize 调用的。但是AspNet.Server.WebListener在 Microsoft.AspNet.Server.WebListener.ServerFactory.Initialize 中调用了 Microsoft.Net.Http.Server.WebListener ,而在Http.Server.WebListener的构造函数中用到了非托管的httpapi.dll:

// Microsoft.Net.Http.Server.WebListener
public WebListener(ILoggerFactory factory)
{
    if (!UnsafeNclNativeMethods.HttpApi.Supported)
    {
        throw new PlatformNotSupportedException();
    }
}

问题就出在这里。 

相关文章:

  • 2022-12-23
  • 2021-11-24
  • 2021-10-07
  • 2021-10-30
  • 2021-10-01
猜你喜欢
  • 2021-08-09
  • 2021-04-04
  • 2021-05-23
  • 2021-12-19
  • 2021-10-13
  • 2021-07-20
  • 2021-07-22
相关资源
相似解决方案