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

时间:2017-03-20 05:53:15

标签: asp.net-mvc asp.net-core-mvc nuget-package 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来处理工作日和假期。该软件包的最新更新(v 1.5.0)需要"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" />

如果最终我不会被提及,我仍然会对所有这一切保持平静:

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

我无法弄清楚为什么会这样。 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没有引入所有这些依赖项,我不再遇到这个问题了。

1 个答案:

答案 0 :(得分:4)

您正在点击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>

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