[英]Different behaviour of Newtonsoft.Json on .NET 5 / Core and .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,區域性=中性,...。系統找不到指定的文件。
解決此錯誤的唯一方法是:
從我的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>
要么
我覺得很奇怪,我必須將整個.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.