【问题标题】:Code Analysis error Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API代码分析错误无法在 MVC4 Web API 中加载文件或程序集 'System.Net.Http, Version=2.0.0.0
【发布时间】:2012-08-20 16:29:47
【问题描述】:

这个问题和这个帖子http://forums.asp.net/t/1807797.aspx/1?System+Net+Http+is+not+found和这个on StackOverflow一模一样

我拥有所有最新的 RTM 位,在 .Net 4.5 中启动了一个新的 MVC 4,添加了 WebAPI nuget 包,现在我的代码分析失败,并出现与上述链接中报告的相同错误。

CA0058 错误运行代码分析 CA0058:找不到引用的程序集“System.Net.Http,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。此程序集是分析所必需的,并被以下程序引用:C:\Projects\InHouse\TimeRecorder\StopGap\TimeRec\bin\TimeRec.dll、C:\Projects\InHouse\TimeRecorder\StopGap\packages\Microsoft.AspNet.WebApi.Core .4.0.20710.0\lib\net40\System.Web.Http.dll。 [错误和警告] - (全局)

据我所知,RC 版本似乎会发生这种情况,因为 .NET 4.5 框架 System.Net.Http 和 WebApi 的 System.Net.Http 版本之间存在冲突。

StackOverflow response 上的其他答案谈到从 .Net 4.5 降级到 4.0,出于显而易见的原因,这不是我的首选解决方案!

【问题讨论】:

  • 我也遇到了这个问题,你找到解决办法了吗?
  • 我无法重现 VS 2012 RTM 位的问题。对我来说奇怪的一件事是 MVC4 中的每个 MVC 4 模板都已经安装了 web api 包。为什么一定要重新安装包?
  • 从 Visual Studio 2012 开始,更好的解决方法是:stackoverflow.com/questions/17298281/…

标签: asp.net-web-api


【解决方案1】:

问题是因为您依赖于较新版本的 System.Net.Http,而不是引用的其他程序集之一。

解决此问题的正确方法是将dependentAssembly 重定向添加到违规项目的app.config。禁用错误的公认答案只是掩盖了一个潜在的问题。

将以下内容添加到app.configruntime 部分,以将无法解析的旧版本重新映射到项目中引用的版本。版本号显然应该根据您的情况进行更新。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

【讨论】:

    【解决方案2】:

    尝试以下方法:

    1. 根据您的 Visual Studio 版本导航到:
      • VS 2010
        %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop
      • VS 2012
        %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Team Tools\Static Analysis Tools\FxCop
    2. 打开FxCopCmd.exe.config并更改AssemblyReferenceResolveModeStrongNameStrongNameIgnoringVersion
    3. 保存更改并重新构建您的项目。

    【讨论】:

    • 我有 CA0058 抱怨找不到我应该引用但后来升级的 EntityFramework 版本。我很困惑,但这让工具运行起来。我猜在这种情况下版本无关紧要,所以这对我有好处。
    • 这解决了症状,而不是根本问题。这种问题我们已经受够了,不用添加其他的!
    • 看起来不是理想的解决方案,因为它可能使用任何版本的程序集并且可能存在一些兼容性问题。
    【解决方案3】:

    从 Visual Studio 2012 及更高版本开始,不要修改安装文件,而是使用此处指定的解决方法:Using Microsoft.Bcl.Async with Code Analysis causes errors

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题(无法在 azure 上本地和远程构建)。 这种解决方法帮助了我: http://connect.microsoft.com/VisualStudio/feedback/details/760208/nuget-package-for-asp-net-mvc-4-web-api-does-not-reference-correct-net-4-5-assemblies#

      这是你需要的部分:

      将packages\Microsoft.Net.Http.2.0.20710.0\lib\net40目录下的System.Net.Http.dll和System.Net.Http.xml文件复制到packages\Microsoft.AspNet.WebApi。 Core.4.0.20710.0\lib\net40 目录。由于缺少的 System.Net.Http.dll 程序集现在与引用的 System.Web.Http.dll 程序集位于同一位置,因此代码分析现在可以正确解决冲突的 System.Net.Http 程序集。

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 1970-01-01
        • 2018-04-19
        • 2017-12-14
        • 1970-01-01
        • 2014-02-17
        • 2018-10-04
        • 2020-01-05
        相关资源
        最近更新 更多