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



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

这破坏了我们的网站。我们做了一些快速的挖掘,发现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如何处理所有这些的指针吗?

我看了这里和这里的几个线程,没有运气。

据我所知,Newtonsoft.Json.dll在4.5之后的所有版本以及它所构建的所有不同的。net框架(2.0、3.5和4.0)中都具有相同的强名称。在Json的4.0版本中,情况并非如此。但是正如你在这里读到的,版本策略从4.5开始改变了。如果每个目标。net框架的程序集的强名称不同就好了,但事实并非如此。因此,将Newtonsoft.Json.dll放在GAC中似乎是一种犯罪。它很可能会破坏机器上的其他应用程序,特别是如果应用程序构建在不同的。net框架版本上。由于我需要将其添加到GAC中,所以我自己构建了它并更改了强名称。

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

我挖了这个Stackoverflow帖子,可能有助于你理解:以什么顺序搜索位置加载引用dll ?

在您的特殊情况下,如果您重新编译您的网站以使用特定版本的库,可能会有所帮助?(想必你现在没有这么做吧?)

或者你也可以尝试把你的版本放在GAC中?

相关内容

  • 没有找到相关文章