我有一个F#3.0应用程序,可以在它构建的计算机上正常工作。我复制了应用程序,FSharp.Core.dll和其他似乎与安装了.net v4.0的Windows Server 2003计算机相关的dll。
应用程序正常启动,但很快就崩溃了。消息是“app.exe中发生了未解决的Microsoft .NET Framework异常[每次都有一些不同的数字]。即时调试此异常失败,出现以下错误:没有安装的调试器具有实时调试启用(....)“
如果删除FSharp.Core.dll,则消息相同。在这种情况下,应用程序甚至无法获得其初始消息。这让我觉得原因可能是其他一些dll丢失了。
我已经尝试过Dependency Walker,但它似乎没有提到Fsharp.Core。它确实抱怨谷歌暗示的一些dll无关紧要(例如名称中带有垫片/设备管理器的东西)。我也试过启动Fuslogvw.exe,但它只是坐在那里没有记录任何输出。我无法在目标计算机上安装MSVC。
我将非常感谢任何有关尝试的建议。非常感谢。
编辑:.net反射器也没有报告任何明显错误....
答案 0 :(得分:3)
在输入点的最开始处尝试并附加到AppDomain.UnhandledException事件。即,AppDomain.CurrentDomain.UnhandledException.Add(fun e -> ... log error ...)
尝试捕获应用程序卸载前的错误。
如果您的应用程序是Windows应用程序,您还可以将处理程序附加到Application.UnhandledException以尝试相同的操作。
另一种选择是将Remote Debugging可再发行组件复制到目标计算机,并从源所在的位置连接到该目标计算机。这将允许您进入崩溃实际发生的代码点。
如果您的应用程序是多域主机,那么远程调试器可能是您最好的选择。
答案 1 :(得分:0)
如果您遇到依赖项问题,可以尝试使用 --standalone
作为编译器参数。如果您只想分发一个简单的应用程序,这可能有所帮助。
如果仍有问题,可以使用Process Monitor来确定应用程序尝试读取/加载但失败的文件和注册表项。请记住在监视器中将过滤器设置为仅您的应用程序,否则您的系统将进行爬行,尝试基本记录所有内容。