DLL版本错误(DLL versioning error)

2019-07-30 10:29发布

我有一个网站,偶尔引发以下错误:

在“/”应用程序的服务器错误。

无法加载文件或程序集“ICSharpCode.SharpZipLib,版本= 0.85.3.365文化=中性公钥= 1b03e6acf1164f73”或它的一个依赖。 在位于集清单定义不匹配的程序集引用。 (从HRESULT异常:0x80131040)

现在我知道我有这个DLL的依赖,但我有版本0.85.5我的系统上。 我已经系统地删除DLL的每一个旧版本的从服务器,重新编译一切,重新发布。 但无论我做什么,似乎每再版后,第一次或两次有人访问该网站,他们得到这个错误。 然后刷新一次或两次后,该错误消失,该网站恢复正常功能。

如果我看看那里被抛出错误的代码行是什么使得它更奇怪的是:

URLRewriter.ProcessRewritingResult(status, excludedEnum, siteName, viewMode, relativePath);

URLRewriter是从第三方包(一类Kentico CMS - CMS.URLRewritingEngine.dll)。 我跑的Dependency Walker对DLL并没有发现任何依赖于ICSharpCode.SharpZipLib。

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

编辑:在@ JeremyThompson的建议下,我跑进程监视器捕获错误。 这里有一个屏幕转储,与相关件突出(被遮挡隐私的原因,一个文件夹的名称)。 你可以通过鼠标右键点击它查看全尺寸,等...

编辑:这是从错误的负载跟踪。 这是否帮助?

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

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

LOG:显示名称= ICSharpCode.SharpZipLib,版本= 0.85.3.365文化=中性公钥= 1b03e6acf1164f73(完全指定的)

LOG:应用平台=文件:/// C:/的Inetpub / wwwroot的/ mysite的/

LOG:初始PrivatePath = C:\的Inetpub \ wwwroot的\ mysite的\ BIN

调用汇编:CMS.WebAnalytics,版本= 6.0.4377.2467,文化=中性公钥= 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,版本= 0.85.3.365,文化=中立,公钥= 1b03e6acf1164f73

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

日志:新的URL文件的尝试下载:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/根/ 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文件/根/ 9760eb69 / 275bb3db / ICSharpCode.SharpZipLib.EXE。

日志:新的URL文件的尝试下载:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/根/ 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。

Answer 1:

现在我知道我有这个DLL的依赖,但我有版本0.85.5我的系统上。 我已经系统地删除DLL的每一个版本从服务器,重新编译一切,重新发布。

听起来就像是“依赖”期待的DLL的版本。 为什么不能代替您系统上的版本(0.85.5)所有副本,与版本(0.85.3.365)? (请一定要检查你的web应用程序的两个'bin文件夹和“GAC”:C:\ WINDOWS \组件)

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

注意:

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

干杯

皮特



Answer 2:

你提到的第一个或两个次用户访问你的错误该网站。

要解决这个问题,我建议你运行过程监控 ,看看它希望找到并加载程序集。

-iisreset
在服务器上 - 启动进程监视器
-view几页,并以最快的速度重现该问题尽可能
-stop了一丝的ProcessMonitor
-搜索的过程中监视跟踪的ICSharpCode.SharpZipLib

如果失败了,看看还有什么是原因:

- 节省了的ProcessMonitor结果为CSV
- 打开Excel中的CSV
-filter所有列
- 选择下拉与被拒绝访问或列的列表...

这应该告诉你的是什么问题,出现错误Could not load file or assembly



Answer 3:

所以,事实证明,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>

我仍然不明白的是,为什么没有相关性跟踪显示了这种依赖性?

编辑:哦,亲爱的,这并没有解决它毕竟。 这似乎不太频繁,现在的情况发生,但今天重新启动IIS之后,我们的测试者之一再次得到了旧的错误消息! :-(



Answer 4:

我觉得你在正确的轨道与绑定重定向。 然而,让我建议,而不是对旧版本的绑定您的应用程序,您试图依赖程序集绑定对较新的版本。

通常情况下,迫使旧版本是糟糕的选择,因为虽然它可能会解决depdenent组件,您可以到依赖于更新版本的代码注入兼容性错误。



Answer 5:

尝试连接到AppDomain.CurrentDomain.AssemblyResolve,所以你可以看到,当/什么装配载荷和明确设置负载位置。



Answer 6:

您可以使用记录的组件加载Fuslogvw.exe应用程序和有关加载错误提供了极大的细节。

在这里阅读更多: http://msdn.microsoft.com/en-us/library/e74a18c4.aspx



Answer 7:

是Kentico CMS并在同一应用程序池定义你的应用程序? 尝试运行您在自己的应用程序池的应用。

有什么能发生的事情是,当一个工作进程被回收,有时你的应用程序要添加的第一个,有时Kentico CMS是要添加的第一个,这改变了ICSharpCode.SharpZipLib解决的方式。

当你偶然做清爽一次或两次,你的应用程序被加载第一,这意味着它的作品。

什么是IIS和Asp.Net应用程序池?

更新:是您的应用程序的Web站点(编译第一次访问),或Web项目(在Visual Studio预编译)。 如果它是一个网站,那么你能不能转换为Web项目,并尝试?



文章来源: DLL versioning error