DLL版本控制错误

Sha*_*ica 15 c# asp.net iis dll sharpziplib

我有一个偶尔会抛出以下错误的网站:

'/'应用程序中的服务器错误.

无法加载文件或程序集'ICSharpCode.SharpZipLib,Version = 0.85.3.365,Culture = neutral,PublicKeyToken = 1b03e6acf1164f73'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

现在我知道我确实依赖于这个DLL,但我的系统上有0.85.5版本.我已经从服务器系统地删除了每个旧版本的DLL,重新编译了所有内容并重新发布.但无论我做什么,似乎每次重新发布后,有人访问该网站的前一两次,他们都会收到此错误.然后刷新一次或两次后,错误消失,网站正常运行.

让我更奇怪的是,如果我查看引发错误的代码行:

URLRewriter.ProcessRewritingResult(status, excludedEnum, siteName, viewMode, relativePath);
Run Code Online (Sandbox Code Playgroud)

URLRewriter是来自第三方软件包的类(Kentico CMS - CMS.URLRewritingEngine.dll).我在该DLL上运行了Dependency Walker,并且在ICSharpCode.SharpZipLib上找不到任何依赖项.

任何想法如何解决这一问题?

编辑:在@ JeremyThompson的建议下,我运行了Process Monitor来捕获错误.这是一个屏幕转储,突出显示相关部分(出于隐私原因,一个文件夹名称被隐藏).您可以通过右键单击它来查看它的完整大小等...

在此输入图像描述

编辑:这是错误的负载跟踪.这有帮助吗?

===预绑定状态信息===

日志:用户= MY-SERVER-12 \管理员

日志:DisplayName = ICSharpCode.SharpZipLib,版本= 0.85.3.365,文化=中立,PublicKeyToken = 1b03e6acf1164f73(完全指定)

日志:Appbase = file:/// C:/ inetpub/wwwroot/MySite /

日志:初始PrivatePath = C:\ inetpub\wwwroot\MySite\bin

调用程序集:CMS.WebAnalytics,Version = 6.0.4377.2467,Culture = neutral,PublicKeyToken = 834b12a258f213f9.

===

日志:此绑定在默认加载上下文中启动.

日志:使用应用程序配置文件:C:\ inetpub\wwwroot\MySite\web.config

日志:使用主机配置文件:C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config

日志:使用C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config中的计算机配置文件.

日志:政策后参考:ICSharpCode.SharpZipLib,Version = 0.85.3.365,Culture = neutral,PublicKeyToken = 1b03e6acf1164f73

日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib.DLL.

日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL.

日志:尝试下载新的URL文件:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.DLL.

日志:尝试下载新的URL文件:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL.

日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib.EXE.

日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE.

日志:尝试下载新的URL文件:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.EXE.

日志:尝试下载新的URL文件:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE.

Sha*_*ica 5

因此,事实证明Kentico对它有自己的依赖性ICSharpCode.SharpZipZip.dll-并且它期望找到较旧的版本。我在这里找到了类似的解决方案。通过将以下代码段插入到我的web.config文件中,看来我终于消除了这个错误!

<runtime>
  <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73"/>
      <bindingRedirect oldVersion="0.85.3.365" newVersion="0.85.5.452"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)

我仍然不明白的是,为什么Dependency Tracker没有显示这种依赖关系?

编辑:哦,亲爱的,毕竟这并没有解决。现在看来这种情况的发生频率降低了,但是今天重新启动IIS之后,我们的测试人员之一又收到了旧的错误消息!:-(


Pet*_*ter 5

现在我知道我确实依赖于这个DLL,但我的系统上有0.85.5版本.我已经从服务器系统地删除了每个版本的DLL,重新编译了所有内容并重新发布.

听起来像'依赖'期待DLL 的OLDER版本.为什么不更换的所有副本的较新的系统上的版本(0.85.5),与较旧的版本(0.85.3.365)?(确保检查Web应用程序的'bin'文件夹和'GAC':c:\ windows\assemblies)

如果您需要,可以在此处下载旧版本:http://sourceforge.net/projects/sharpdevelop/files/SharpZipLib/0.85.3/

注意:

  • 更换DLL后,停止IIS并清除所有临时ASP.Net文件.例如:C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files
  • 另请注意:请记住更新Visual Studio解决方案,以便它引用旧版本.

干杯

皮特