Asp.net mvc 是什么导致IIS在4.0应用程序池中加载.NET 2.0 dll而不是4.0版本?

Asp.net mvc 是什么导致IIS在4.0应用程序池中加载.NET 2.0 dll而不是4.0版本?,asp.net-mvc,iis,json.net,Asp.net Mvc,Iis,Json.net,我们有一个网站,使用运行在IIS7上的最新MVC4构建。我们创建了自己的应用程序池,并将其运行时版本设置为4.0。过去几个月一切都很顺利。 昨天,我们升级到了最新的内部版本,包括该机器所需的其他组件。其中一个组件已安装到GAC的几个组件的Newtonsoft.Json.dllv4.5.10中 这破坏了我们的网站。我们做了一些快速挖掘,发现IIS(w3wp.exe)正在从GAC加载Newtownsoft.Json.dll,而不是从我们的网站(4.5.11-for.NET 4.0)加载我们的版本。这

我们有一个网站,使用运行在IIS7上的最新MVC4构建。我们创建了自己的应用程序池,并将其运行时版本设置为4.0。过去几个月一切都很顺利。 昨天,我们升级到了最新的内部版本,包括该机器所需的其他组件。其中一个组件已安装到GAC的几个组件的Newtonsoft.Json.dllv4.5.10中

这破坏了我们的网站。我们做了一些快速挖掘,发现IIS(w3wp.exe)正在从GAC加载Newtownsoft.Json.dll,而不是从我们的网站(4.5.11-for.NET 4.0)加载我们的版本。这令人费解,因为我们将应用程序池设置为.NET Framework 4.0

什么会导致IIS从GAC而不是本地版本加载此DLL

有没有办法强迫它使用我们的本地副本

它们很有可能很快成为同一版本,但其中一个目标是.NET v4.0而不是v2.0有关于IIS如何处理所有这些问题的指针吗?


我看了几个线程,但运气不好。

我记得.net库有一个明显的优先顺序

我找到了这篇Stackoverflow文章,这可能有助于您理解:

在您的特定情况下,如果您重新编译站点以使用特定版本的库,是否会有所帮助?(大概你现在没有这么做吧?)

或者你也可以把你的版本放在GAC上进行试验


希望这些能给你一些想法。

据我所知,Newtonsoft.Json.dll自4.5以来的所有版本以及它为之构建的所有不同的.NET框架(2.0、3.5和4.0)都有相同的强名称。在Json.NET的4.0版本中并非如此,但正如您所看到的,版本控制策略从4.5开始发生了变化。如果每个目标.NET框架的程序集的强名称都不同,那就太好了,但事实并非如此。因此,将Newtonsoft.Json.dll放在GAC中似乎是一种犯罪。它很可能破坏机器上的其他应用程序,特别是如果应用程序构建在不同的.NET Framework版本上。因为我需要将其添加到GAC中,所以我自己构建了它并更改了强名称。

谢谢您提供的信息。我很清楚DLL的正常加载顺序。但是,这不是您的常规场景,因为涉及IIS。我想问题的核心是:为什么设置为.NET 4.0的应用程序池会加载一个针对.NET 2.0的DLL,而不是它在/bin文件夹中的一个完全有效的4.0 DLL?是的,这就是我们本周所发现的。我们最终用完整的版本号重新签署了.NET 3.5版本。这使我们可以在web应用程序中使用常规的json.net。“我们”是你和我。蜜蜂先生