我正在爲我的WebApp和PCL使用Microsoft HTTP客戶端庫2.2.29。Microsoft.Net.Http庫MVC項目和PCL之間的衝突
這裏是鏈接:https://www.nuget.org/packages/Microsoft.Net.Http/
PCL使用System.Net.Http.Primitives.dll版本,29年7月1日因爲兼容性。
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 Project上收到以下錯誤。
[FileLoadException:未能加載文件或組件 'System.Net.Http.Primitives,版本= 4.2.29.0,文化=中性 公鑰= b03f5f7f11d50a3a' 或它的一個依賴。位於程序集清單定義中的 與程序集 的引用不匹配。 (從HRESULT異常:0x80131040)]
System.Reflection.RuntimeAssembly._nLoad(的AssemblyName文件名,字符串 的代碼庫,證據assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark & stackMark,IntPtr的pPrivHostBinder,布爾 throwOnFileNotFound,布爾forIntrospection,布爾 suppressSecurityChecks) 0
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,證據assemblySecurity,RuntimeAssembly reqAssembly, StackCrawlMark & stackMark,IntPtr的pPrivHostBinder,布爾 throwOnFileNotFound,布爾forIntrospection,布爾 個suppressSecurityChecks)234
System.Reflection.RuntimeAssembly.InternalLoad(字符串assemblyString, 證據assemblySecurity,StackCrawlMark & stackMark,IntPtr的 pPrivHostBinder,布爾forIntrospection)108
System.Reflection.RuntimeAssembly.InternalLoad(字符串assemblyString, 證據assemblySecurity,StackCrawlMark & stackMark,布爾 forIntrospection)25 System.Reflection.Assembly.Load(字符串 assemblyString)34
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 的AssemblyName,布爾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" />
我可以刪除網頁。配置配置,使其與1.7.29版本一起工作。但我不想這樣做,我想使用每個項目的這個庫的最新兼容版本。
爲什麼在構建非相關項目時,VS 2015社區版/ nuget會將非兼容/較低版本的庫放入web/bin文件夾?
我該如何解決這個問題?
你最好問MSBuild給你診斷。沒有這一點,不清楚是誰複製了舊版本。 –
如何設置PCL項目目標?我爲.NET 4.5,Windows 8,Windows Phone 8和Xamarin Android創建了一個示例PCL項目。安裝Microsoft HTTP客戶端庫2.2.29後,System.Net.Http.Primitives.dll版本爲1.5.9。而且我沒有在我的WebApp中設置bindingRedirect,我的Xamrin應用程序和Web應用程序都可以構建成功。你可以在這裏分享一個示例項目來重現這個問題嗎? –
@Wendy請在這裏看到https://github.com/reyou/CrossLibraryReference下載這個項目,並首先構建web應用程序並檢查bin文件夾,然後建立類庫2並再次檢查bin文件夾。如果可能的話請嘗試使用VS 2015社區版。這裏是我的經驗:https://github.com/reyou/CrossLibraryReference/tree/master/debugImages這次它發生在「System.Net.Http.Extensions.dll」 –