我有一个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
没有引入所有这些依赖项,我不再遇到这个问题了。
答案 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,具体取决于您的项目和您引用的库。