我正在尝试使用Ninject自己托管的WebAPI创建一个Windows服务。我得到它的工作,但我不得不添加一个引用system.web,这似乎是错误的。如果不能的System.Web参考我这些编译错误:OWIN自主应用程序使用Ninject OWINHost需要system.web吗?
类型“System.Web.Routing.RouteCollection”在未引用的 集中定义。您必须添加对组件 'System.Web,Version = 4.0.0.0,Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'的引用。
类型'System.Web.Routing.Route'在程序集中定义,该程序集未引用 。您必须添加对程序集'System.Web的引用, Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。
的错误,出现了我根据这篇文章 Setting up a OWIN WebApi application
我也只好到Microsoft.Owin限制到2.1.0版本Ninject工作添加Ninject后。在服务启动期间,Ninject正在寻找Owin 2.1.0。如果您在Microsoft.Owin上获得最新版本,它将滚动到3.0。
我使用的三个主要的NuGet包:
Microsoft.AspNet.WebApi.OwinSelfHost
Ninject.Web.Common.OwinHost
Ninject.Web.WebApi.OwinHost
这里是我所有的包(注意在Microsoft.Owin的约束)
<package id="Microsoft.AspNet.WebApi" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" allowedVersions="(,2.1]" />
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="2.0.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
<package id="Ninject" version="3.2.2.0" targetFramework="net45" />
<package id="Ninject.Extensions.ContextPreservation" version="3.2.0.0" targetFramework="net45" />
<package id="Ninject.Extensions.NamedScope" version="3.2.0.0" targetFramework="net45" />
<package id="Ninject.Web.Common" version="3.2.2.0" targetFramework="net45" />
<package id="Ninject.Web.Common.OwinHost" version="3.2.2.0" targetFramework="net45" />
<package id="Ninject.Web.WebApi" version="3.2.1.0" targetFramework="net45" />
<package id="Ninject.Web.WebApi.OwinHost" version="3.2.1.0" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
下面是Windows服务的Program.cs的样子
using Microsoft.Owin.Hosting;
using Ninject;
using Ninject.Web.Common.OwinHost;
using Ninject.Web.WebApi.OwinHost;
using Owin;
using System.Reflection;
using System.ServiceProcess;
using System.Web.Http;
namespace ServiceExample
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
using (WebApp.Start<Startup>("http://localhost:12345"))
{
ServiceBase.Run(ServicesToRun);
}
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureWebAPI(app);
}
private void ConfigureWebAPI(IAppBuilder app)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}",
new {id = RouteParameter.Optional});
app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);
}
private static StandardKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
}
}
}
我需要这3个,除了你列出的,使我的工作(.NET 4.5.1)作为一个Windows服务: “Microsoft.AspNet.WebApi.OwinSelfHost” “Microsoft.Owin.Host.HttpListener “ ”Microsoft.Owin.Hosting“ – HungryPipo 2015-12-03 21:17:42
添加Ninject(NUGet包之一)似乎正在添加引用,似乎打破了这一点!简单的解决方案是删除该参考! – 2016-08-11 01:58:26
添加到上面:手动添加对system.web的引用也似乎使错误消失,并且目前使用此方法而不是移除对System.Web.Http.WebHost的引用(目前尚不完全清楚参考是多余的)。 – 2016-08-11 23:16:57