簡體   English   中英

Newtonsoft.Json 10.0.0.2在舊的MVC 5應用程序中提取.NET Framework標准版

[英]Newtonsoft.Json 10.0.0.2 pulling .NET framework standard edition in a old MVC 5 application

我有一個使用完整的.NET框架(v 4.6.2)的MVC 5應用程序

當我在此項目上更新軟件包時,Json.Net軟件包已升級到10.0.0.2如果在更新后運行該應用程序,則會收到錯誤消息

無法加載文件或程序集'System.Runtime,版本= 4.1.1.0,區域性=中性,...。系統找不到指定的文件。

解決此錯誤的唯一方法是:

  1. 從我的web.config中刪除以下依賴項行

      <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" /> </dependentAssembly> 

要么

  1. 將System.Runtime dll添加為Nuget程序包。

我覺得很奇怪,我必須將整個.NET框架的所有核心dll添加為Nuget包。

我的問題是:

Json.Net軟件包及其依賴項有問題嗎? 作為一個nuget軟件包,應該能夠自動拉出其依賴項,但是我必須手動安裝System.Runtime nuget軟件包才能使我的應用程序正常工作

要么

Nuget搞砸了依賴性嗎?

要么

也許這就是Microsoft希望您繼續做的事情? 也就是說, 即使對於不基於.NET Core或.NET標准庫的項目, 甚至對於基本的dll(如System.Runtime) 也要使用nuget包。

編輯:基於注釋增加了問題的清晰度

我能夠找到一個解決方案,我將其發布在這里,因為它可能最終對其他人很有用。

TL; DR Nuget搞砸了。

長答案,

我有一個包含約100個CSProj文件的解決方案,其中一個(Project X)錯誤地安裝了.NET標准庫。

幾周后,發布了新版本的Json.Net,我轉到nuget Manager上的“ consolidate”選項卡以更新和合並我解決方案中100個項目中的Json.Net版本。

這是發生混亂的地方,由於某種原因,Nuget決定采用它安裝在項目X中的Json.Net程序包(具有.NET標准程序集依賴性),並將其應用於我的所有項目,包括主Web項目。

這意味着Web項目現在需要基本DLL的版本,而該版本在完整的.NET框架中不存在。 例如,它期望System.Runtime為v4.1.1.0,這是.NETStandard 1.3庫期望的版本,如此處的依賴項映射所示。

這導致了上述問題。

在我的情況下,解決方案是刪除Project X中添加的不正確的軟件包,卸載Json.Net軟件包,然后將其重新安裝在所有其他項目中。 這次它獲得了正確的依賴關系圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM