过去3个月,我在VS2010的Windows 7上开发了C#app。现在它几乎完成了,我发现它无法在XP上运行。它立即崩溃,并显示消息“程序遇到问题,需要关闭......”。标准窗口“发送/不发送”错误没有具体说明问题。
我可以在这里发布代码,但实际上有数千行,我不知道哪个部分很重要,哪个部分不重要。有人能告诉我“常见的嫌疑人”会导致这个问题吗?
由于 (顺便说一下,我的两台计算机上都有Framework 4.我的其他.NET应用程序运行正常。)
[溶液] 我在VS10中创建的LineShape问题是GUI的一部分。这些线导致崩溃我不知道为什么。事实证明,这不是操作系统问题,类似的问题出现在W7和Vista上。基本上每个Pc都没有VS instaled :)
答案 0 :(得分:0)
在应用程序某处的静态虚拟初始化器属性中注册Appdomain.UnhandledException事件,在将其重新抛出到环境之前处理/输出处理程序中的事件。如果这没有帮助它是另一个静态成员在你的处理程序订阅之前调用的某个地方或者“其他东西是错误的”。
static bool dummy = RegisterUnhandledExceptionHandler();
private static bool RegisterUnhandledExceptionHandler()
{
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
Exception ex = (e.ExceptionObject as Exception);
// quick dump to file because environment will exit soon
File.WriteAllText("unhandled.txt", ex.StackTrace);
throw ex;
}
return true;
}
答案 1 :(得分:0)
在您的应用程序main
处,在代码中处理应用程序域异常和应用程序线程异常,然后将其诊断为:
AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException;
//in windows forms you need also to add these two lines
Application.ThreadException += OnApplication_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
答案 2 :(得分:0)
我打赌您正在使用P / Invoke或混合模式程序集(使用不安全或本机代码)。
可能存在平台差异(考虑32/64位数之间的差异,但也缺少/更改了API调用)。
为了找出代码中最可能的位置,我有一个稍微不正统的建议:通过MoMa分析器(link)运行它。
MoMa分析器旨在检测在跨平台Mono Framework(可在Unix,MAC,Windows甚至iOS和Android平台上运行)上运行为MS .NET Framework开发的应用程序时可能出现的可移植性问题。
它会为您提供可能导致问题的报告。您当然可以忽略报告为“未实现单声道”的项目 - 因为这不是问题。但是,它会找到P / Invoke的所有有趣用法以及可能指向你的问题。