我如何找出哪个缺失的DLL导致我的.NET应用程序在启动时崩溃?

9

当向典型的.NET应用程序添加对第三方程序集的依赖时,很容易忘记将它们添加到安装程序中。这个问题通常只在应用程序安装后才会显露出来,表现为启动时崩溃并且没有可用的有用信息。

什么是查找需要添加到安装程序的程序集的最佳工具和技术?

3个回答

5
完全自动化的构建有助于减少人为因素,从而减少错误。如果每次都是自动构建的,那么你就知道每个构建都是相同的,所以一旦你成功构建一次,它将始终正常工作。
我们使用像MSBuildCruiseControl.net这样的工具。
如果你正在寻找帮助确定崩溃原因的工具,请查看Assembly binding (Fusion) log viewer (or fuslogvw)。如果在启动应用程序之前启动它,并设置日志文件位置并打开完整日志记录,它将报告任何尝试绑定程序集的情况,并列出所有失败的情况。

我的应用程序是由CCNET使用MSBuild构建的,它还运行自动化验收测试,但当前并未测试安装程序。我想这可能是尽早捕获问题的一种方法,但我特别寻求帮助找到问题在发生时是什么。 - GraemeF
那么你不是想要阻止它发生,而是想要在客户机上应用程序崩溃时告诉你缺少哪个.dll文件? - Simon P Stevens
是的,首先要在测试机器上进行测试,希望一切顺利! ;) - GraemeF
1
啊,我第一次误解了问题。请看我关于fuslogvw所做的修改。 - Simon P Stevens
我知道fuslogvw,但我希望有一个更容易使用的东西。哦,好吧!谢谢。 - GraemeF

3

Dependency Walker是一个非常实用的小工具,它可以跟踪应用程序或DLL文件的依赖关系链,并突出显示任何缺失的依赖项。虽然对于终端用户来说使用起来不太直观,但如果您开始使用它,就能自行发现任何缺失的内容。

http://www.dependencywalker.com/


5
Dependency Walker 对于 .Net 程序集并不是很有用。 - Frank Bollack

0

这取决于您的安装程序的功能。VS集成设置项目可以自动获取任何依赖程序集。您可能需要检查一下您的安装程序是否具有类似的功能。

另一方面,您可以指示您的VS项目将所有依赖项复制到输出目录,并从那里简单地包含所有文件到您的安装程序中。


我正在使用WiX,并明确列出要包含的文件。 - GraemeF
我不知道有任何可以帮助你的WiX工具,所以你可能想坚持我的建议,从输出目录中简单地拾取所有文件。这是我能想到的最简单的方法。如果项目可以从输出目录运行,在目标机器上安装后也应该可以运行。 - Frank Bollack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接