我正在为我的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文件夹?
如何解决此问题?
答案 0 :(得分:0)
我知道这不是一个经过验证的解决方案,但我必须逐个从解决方案中删除项目并重新添加。然后我通过右键单击项目并选择依赖项来重新映射项目依赖项。它似乎现在正在运作。当超过3个项目相互交叉引用时,VS构建顺序可能存在问题。