【问题标题】:Why "Method not found: 'Void System.Web.Http.HttpResponseException..ctor" after package update?包更新后为什么“找不到方法:'Void System.Web.Http.HttpResponseException..ctor”?
【发布时间】:2017-08-11 07:43:04
【问题描述】:

我有一个 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 的最新版本没有引入所有这些依赖项,我不再面临这个问题。

【问题讨论】:

  • 您在升级后发现了该问题。问题是 System.Web.Http.HttpResponseException 没有构造函数,至少不是库试图使用的构造函数。
  • 我知道 ctor=constructor。多么疯狂的错误。可能是库版本不匹配。我的 GAC 有问题吗?我该如何解决这种情况?
  • 很可能您的 lib 版本不匹配,其中一个类尝试调用尚不存在、不再存在或已从私有更改为公共的构造函数。不幸的是,这是我能帮助你的,因为这对我来说也不清楚(如果我知道解决方案,我会写一个答案)。
  • 我想知道也许我应该在 Web.config 的运行时程序集绑定部分调整一些版本,或者我应该在那里添加程序集?
  • 找到原因了吗?即使编译器很高兴,我对 .Net Framework 4.6.1 也有相同的运行时错误。我放弃了抛出不同的异常。

标签: asp.net-mvc asp.net-core-mvc nuget-package visual-studio-2017


【解决方案1】:

您遇到了 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,具体取决于您的项目和您引用的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多