OWIN HttpListener 找不到。

72

当我尝试启动时:

WebApp.Start<SrvcHst>(new StartOptions { Port = 9956, 
     ServerFactory = "Microsoft.Owin.Host.HttpListener" });

我遇到了以下异常。可能的根本原因是什么?

System.MissingMemberException was caught
  HResult=-2146233070
  Message=The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener
  Source=Microsoft.Owin.Hosting
  StackTrace:
       at Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveServerFactory(StartContext context)
       at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context)
       at Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions options)
       at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options)
       at Microsoft.Owin.Hosting.WebApp.StartImplementation(IServiceProvider services, StartOptions options)
       at Microsoft.Owin.Hosting.WebApp.Start(StartOptions options)
       at Microsoft.Owin.Hosting.WebApp.Start[TStartup](StartOptions options)

你的应用程序中是否部署了 Microsoft.Owin.Host.HttpListener.dll,并与主程序集放置在同一目录下?或者你可以将其作为项目引用添加,并将其复制到 bin 目录中。 - Marcel N.
@MarcelN。是的。它已经作为项目的引用添加了。 - GilliVilla
1
类似问题:https://katanaproject.codeplex.com/discussions/449301 - Philip Pittle
4个回答

131

您需要在项目引用中包括 Microsoft.Owin.Host.HttpListener.dll

您可以通过 NuGet 添加它。

然而,如果代码执行:

WebApp.Start<SrvcHst> (...);

如果一个类库中包含了它,请确保使用类库的可执行文件也引用了Microsoft.Owin.Host.HttpListener.dll,否则它将不会随程序一起部署,因为从类库中没有显式引用它。

查看bin/Debug文件夹,确保DLL文件在那里。


3
谢谢Pierre。对你的回答提出改进建议:我不想手动将参考内容添加到所有使用我的库的应用程序中,而是希望从我的程序集中引用HttpListener程序集中的任何内容,以便构建时强制将该DLL文件带入应用程序的输出文件夹。 - Bent Tranberg
好的,确实,你只需要确保包含了 Microsoft.Owin.Host.HttpListener.dll。不过怎么做取决于你自己 :-) - Pierre Arnaud
8
为什么这不是 Microsoft.Owin.Hosting 的依赖项? - Josh Sutterfield
你需要设置加粗,确保使用库的可执行文件也包含引用。 - qakmak

47

请确保您已安装 Microsoft.Owin.Host.HttpListener 包。

要安装该包,请使用以下命令行:

Install-Package Microsoft.Owin.Host.HttpListener

我有一个对这个dll的引用,但由于某种原因它没有被复制到bin目录中。然后我尝试了你的建议通过Nuget安装它,结果成功了。现在它已经被复制到输出目录中。 - Tobias Koller
您需要在“启动项目”中添加对HttpListener的引用。因此,如果您在另一个项目中使用WebApp.Start,请小心。 - Johann67

7
有时候,NuGet引用可能会被添加不完整。 如果您已安装了软件包,但是没有包含引用,请尝试通过以下方式重新安装它们;
Update-Package -reinstall

在包管理器控制台中。


我也尝试使用Update-Package -reinstall,但在过程中出现了错误,所有的包都被删除了。我不得不手动添加所有的引用...所以要小心 ;) - Tobias Koller
只需从源代码控制中恢复packages.config,或者确保您在备份之前进行了备份。 - Daniel Park

0

针对Pierre和Damith的回答,补充一个小点。如果你正在使用Mac OS,请运行以下命令安装HttpListener

dnu install Microsoft.Owin.Host.HttpListener

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接