在 IIS 服务器上重命名 dll 后出现不匹配程序集定义错误

mismatch assembly definition error after dll renaming on IIS server

我在 Visual Studio 2012 年对网站进行了一些改进并重建了项目。在 IIS 服务器上,我将原始 dll 重命名为 fooOLD.dll 并复制了较新的版本 foo.dll.

但现在当我尝试 运行 主页时,出现错误:

无法加载文件或程序集 'fooOLD' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

我试过停止和启动 IIS 服务器,但无济于事。

显然,IIS 注意到我对文件的重命名,并且 "remembered" 它在某处。我如何告诉 IIS 我正在尝试用新版本替换旧的 dll?

  1. 做 iisreset
  2. 转到 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 文件或 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 个文件 注意:Select 路径基于您使用的框架版本。
  3. 删除以您的应用程序命名的文件夹。

IIS 将使用新复制的文件。

您需要从 bin 目录中删除旧的 DLL。

如果不这样做,则该目录中有两个程序集 same AssemblyName:

The runtime does not consider the file name when determining an assembly's identity. The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the runtime.

现在显然首先加载了错误的程序集,导致抛出错误,因为加载程序集(您的站点)是针对引用程序集的较新版本编译的。