The type ‘System.Web.Routing.RouteCollection’ is defined in an
assembly that is not referenced. You must add a reference to assembly
‘System.Web,Version=4.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a’.The type ‘System.Web.Routing.Route’ is defined in an assembly that is
not referenced. You must add a reference to assembly ‘System.Web,
Version=4.0.0.0,PublicKeyToken=b03f5f7f11d50a3a’.
根据这篇文章添加了Ninject后出现错误
Setting up a OWIN WebApi application
我也不得不将Microsoft.Owin限制为2.1.0版,让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; } } } }
解决方法
当我想要一个API项目作为类库和单独的主机项目(一个使用控制台和其他IIS)时,我有同样的问题,如this great blog post所述
问题是当我执行Install-Package Microsoft.AspNet.WebApi来安装ASP.NET Web API时,它还添加了对System.Web.Http.WebHost.dll的引用,结果package.json是:
<packages> <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" /> <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> </packages>
所以解决方法是删除对System.Web.Http.WebHost.dll的引用,并从packages.json中删除Microsoft.AspNet.WebApi和Microsoft.AspNet.WebApi.WebHost,所以当有些人会做nuget还原/重新安装:
<packages> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> </packages>
这是我的工作类库中的package.json ASP.NET Web API项目:
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" /> <package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" /> <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> <package id="Owin" version="1.0" targetFramework="net452" />