当我有程序集时,WebAPI 发现引用错误

Posted

技术标签:

【中文标题】当我有程序集时,WebAPI 发现引用错误【英文标题】:WebAPI found reference error when I have the assembly 【发布时间】:2014-08-07 11:31:56 【问题描述】:

我在我的解决方案中创建了一个 MVC 4 Web API 应用程序,但我现在遇到了 2 个错误,我需要一些帮助。

'System.Web.Http.HttpConfiguration' 不包含对 'MapHttpAttributeRoutes' 并且没有扩展方法 'MapHttpAttributeRoutes' 接受类型的第一个参数 可以找到“System.Web.Http.HttpConfiguration”(您是否缺少 使用指令还是程序集引用?)

以下代码出现此错误

文件:WebApiConfig.cs(在 App_Start 文件夹中)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web;

    public static class WebApiConfig
    
        public static void Register(HttpConfiguration config)
        
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/controller/id",
                defaults: new  id = RouteParameter.Optional 
            );
        
    

另一个,在 Global.asax 中

'System.Web.Http.GlobalConfiguration' 不包含定义 对于“配置”

文件:Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Http.WebHost;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

public class WebApiApplication : System.Web.HttpApplication

    protected void Application_Start()
    
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    

更新

通过 Nuget 安装 WebAPI WebHost(@sa_ddam213 的建议)后,它解决了一些问题,但现在运行我的应用程序时出现此错误

无法加载文件或程序集“System.Net.Http”或其其中之一 依赖关系。定位程序集的清单定义不 匹配程序集引用

Web.config 文件有程序集

    <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-5.2.0.0" newVersion="5.2.0.0"/>
    </dependentAssembly>

【问题讨论】:

您确定您的项目“参考”文件夹中有 System.Web 吗? @JohanHjalmarsson 是的,我用一张图片更新了我的问题,我们可以在其中看到该项目中存在的一些参考资料 @Lucas_Santos 你能检查你的 web.config 是否有一些程序集重定向吗? 你安装了吗Microsoft.AspNet.WebApi.WebHost 很确定你可以 nuget Install-Package Microsoft.AspNet.WebApi.WebHost 我在我的项目中卸载了一些 nuget 包,包括 MVC,然后重新安装。解决。谢谢大家帮助我。 【参考方案1】:

强制重新安装 WebAPI 可以完成这项工作:

 update-package microsoft.aspnet.webapi -reinstall

【讨论】:

对我来说 -reinstall 开关是关键......我运行了更新包,直到我脸色发青,它一直告诉我没有要应用的更新......这是有道理的,但我找不到如何强制它重新安装...... -reinstall 是如此直观,但我错过了...... lol 对我来说,这应该被标记为 answere。像魅力一样工作谢谢 有这个确切的问题,这个答案解决了它,谢谢! 万岁! 我使用 sidewaffle 来获得一个 angular + web api 项目模板,从项目模板构建代码时出现了这 3 个确切的错误,我做了很多工作来解决这个问题 - 认为我在一些某些 NuGet 包的更高版本的类型...运气不太好直到这个答案 - 是的,它对我有用。【参考方案2】:

我做到了:

get-project <project_name> | uninstall-Package Microsoft.AspNet.WebApi.WebHost -force

然后重新安装(具体版本与其他项目一致)

get-project <project_name> | install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.2

这解决了我的问题。

【讨论】:

【参考方案3】:

我在我的项目中卸载了一些 nuget 包,包括 MVC,然后重新安装。解决。谢谢大家帮助我。

【讨论】:

【参考方案4】:

更新您的 NuGet 包。为我工作。

【讨论】:

【参考方案5】:

请尝试通过在nugetmanager 控制台上运行以下命令来更新您的软件包

update-package microsoft.aspnet.webapi.webhost -reinstall

【讨论】:

【参考方案6】:

特别是对我来说,我从 TFS 下载了有人在工作的解决方案并得到了错误

System.Web.Http.HttpConfiguration' does not contain a definition for 'MapHttpAttributeRoutes' and no extension method 'MapHttpAttributeRoutes' 

我是关于继续重新安装 web api,但我知道过去的经验是,您安装项目的顺序的依赖链最终可能会有点戏剧。

JSON 时好时坏,因为有时我看到更新的 JSON 强制并卸载另一个软件包的新版本并安装旧版本,因为它认为“它最了解”。

对我来说,通过 nuget 更新 JSON 是我所要做的。

【讨论】:

【参考方案7】:

1) 检查您的解决方案文件夹 packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45 是否有 System.Web.Http.dll 可用。它应该在那里。如果不可用,请从任何其他正在运行的项目包文件夹中复制它。 2) 从您的项目中删除对 System.Web.Http.dll 的引用。 3) 通过指向新的 .dll 添加新的引用,即 packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Web.Http.dll

【讨论】:

以上是关于当我有程序集时,WebAPI 发现引用错误的主要内容,如果未能解决你的问题,请参考以下文章

在 bigquery 中创建数据集时,谷歌 App 引擎出错

加载程序集时发生冲突的依赖项

尝试加载反应式程序集时,Expression Blend 4 失败

加载管道程序集时出错

将数据库代码移动到单独的程序集时将连接字符串放在哪里

错误 CS0012 类型“XmlReader”在未引用的程序集中定义