软件包更新后,为什么“未找到方法:'Void System.Web.Http.HttpResponseException..ctor”?

Csa*_*oth 3 asp.net-mvc nuget-package asp.net-core-mvc visual-studio-2017

我有一个ASP.NET MVC应用程序,该应用程序在上次NuGet软件包更新后开始出现异常。该Web应用程序使用.NET Framework 4.6.1,而开发人员计算机是Windows Server 2012 R2 Essentials。我使用的一个软件包是Stripe.NET,用于付款处理。仅需要其早期版本<package id="System.Net.Http" version="4.0.0" targetFramework="net461" />。Visual Studio标记有一个较新的版本(当时是4.3.0),但是当我更新它时,它引入了大量的软件包。因此,我只是将该依赖关系还原为4.0.0,Stripe不需要更新。

然后我最近介绍Nager.Date了处理工作日和假期的方法。该1.5.0软件包的最新更新(v )需要"NETStandard.Library" version="1.6.1"。就像升级System.Net.Http到一样4.3.0,升级到该功能会引入Nager.Date大量我提到的软件包。总结:迟早我必须了解并更新。

引入的软件包:

<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net461" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net461" />
<package id="System.AppContext" version="4.3.0" targetFramework="net461" />
<package id="System.Collections" version="4.3.0" targetFramework="net461" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net461" />
<package id="System.Console" version="4.3.0" targetFramework="net461" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net461" />
<package id="System.Diagnostics.DiagnosticSource" version="4.3.0" targetFramework="net461" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net461" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net461" />
<package id="System.Globalization" version="4.3.0" targetFramework="net461" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net461" />
<package id="System.IO" version="4.3.0" targetFramework="net461" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net461" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net461" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net461" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net461" />
<package id="System.Linq" version="4.3.0" targetFramework="net461" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net461" />
<package id="System.Net.Http" version="4.3.1" targetFramework="net461" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net461" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net461" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net461" />
<package id="System.Reflection" version="4.3.0" targetFramework="net461" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net461" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net461" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net461" />
<package id="System.Runtime" version="4.3.0" targetFramework="net461" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net461" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net461" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net461" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net461" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net461" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net461" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net461" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net461" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net461" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net461" />
<package id="System.Threading" version="4.3.0" targetFramework="net461" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net461" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net461" />
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net461" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net461" />
Run Code Online (Sandbox Code Playgroud)

如果最终我不被告知,我仍然会与所有这些保持和平:

Exception thrown: 'System.MissingMethodException' in ThruThink.dll
Additional information: Method not found: 'Void System.Web.Http.HttpResponseException..ctor(System.Net.Http.HttpResponseMessage)'.
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样。Nager.Date所有者给了我一个主意:他使用VS 2017生成了最新的软件包,因此我进行了安装,希望它可以安装一些可以神奇地解决此异常的程序集。但这到目前为止还没有发生。

我不了解这些软件包的清单。它们中的许多都是基础库,应该是CLR本身的一部分(例如System.IO,System.Console等),并且没有NuGet包就可以使用。也许一个线索是Microsoft.NETCore.Platforms,尽管我使用的是.NET 4.6.1,但我并未使用.NET Core。我还没有太多地使用.NET Core,但是这些包对.NET Core基础结构有意义。这是怎么回事?


最新版本的Nager.Date并没有吸收所有这些依赖关系,我也不再面临这个问题。

use*_*702 7

您遇到System.Net.Http OOB版本控制问题,请参阅Broken System.Net.Http 4.1.1-4.3.0 post-mortem。程序集重定向应解决此问题:

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
  <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

您可能需要重定向到4.1.1.2或4.0.0.0,具体取决于您的项目和所引用的库。