【发布时间】: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