MVC项目与PCL之间的Microsoft.Net.Http库冲突

时间:2016-09-18 00:19:32

标签: .net visual-studio-2015 nuget portable-class-library

我正在为我的WebApp和PCL使用Microsoft HTTP Client Libraries 2.2.29。

以下是链接:https://www.nuget.org/packages/Microsoft.Net.Http/

由于兼容性,PCL正在使用 System.Net.Http.Primitives.dll版本1.7.29

MVC项目正在拉 System.Net.Http.Primitives.dll版本4.2.29 ,因为它与4.5框架兼容。它也依赖于我的PCL。

如果我只构建我的WebApp,它工作正常,因为它提取4.2.29版本。但是如果我构建另一个依赖于我的PCL的项目(例如Xamarin APP),它会将1.7.29版本抛出到web / bin文件夹中,并且我在Web项目上收到以下错误。

  

[FileLoadException:无法加载文件或程序集   ' System.Net.Http.Primitives,版本= 4.2.29.0,文化=中立,   公钥= b03f5f7f11d50a3a'或其中一个依赖项。该   定位程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)]
  System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String   codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,   StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean   throwOnFileNotFound,Boolean forIntrospection,Boolean   suppressSecurityChecks)+0
  System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName   assemblyRef,Evidence assemblySecurity,RuntimeAssembly reqAssembly,   StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean   throwOnFileNotFound,Boolean forIntrospection,Boolean   suppressSecurityChecks)+234
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,IntPtr   pPrivHostBinder,Boolean forIntrospection)+108
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+25 System.Reflection.Assembly.Load(String   assemblyString)+34
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,Boolean starDirective)+49

我在web.config上有以下配置:

 <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.29.0" newVersion="4.2.29.0" />
      </dependentAssembly>

PCL packages.config

<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="portable45-net45+win8+wp8+wpa81" />

WebAPP packages.config

 <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net451" />

我可以删除web.config配置,使其适用于1.7.29版。但是我不想这样做,在那里我想使用每个项目的这个库的最新兼容版本。

为什么VS 2015社区版/ nuget会在构建非相关项目时将不兼容/较低版本的库放入web / bin文件夹?

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我知道这不是一个经过验证的解决方案,但我必须逐个从解决方案中删除项目并重新添加。然后我通过右键单击项目并选择依赖项来重新映射项目依赖项。它似乎现在正在运作。当超过3个项目相互交叉引用时,VS构建顺序可能存在问题。