是什么导致我的发布版本崩溃(XNA)?
我最近做了一个演示游戏的发布版本。我已经在家中的所有机器上测试过它,它们是Windows 7和Windows 8机器以及所有64位操作系统的组合。是什么导致我的发布版本崩溃(XNA)?
我将演示传递给了一位朋友,他说这台机器正在崩溃。
我已经将游戏构建为x86发行版,因此它应该可以在大多数Windows环境中使用。作为一项测试,我在工作中将其加载,并且也失败了。我正在梳理日志,试图弄清楚为什么它失败了,但是如果有人能够找我,不太明白这个问题。
根据注册表,我确实安装了.NET 4.5.1的一个版本。我的.NET崩溃日志提供了以下错误。
Application: Monochromia.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.IO.FileNotFoundException Stack: at Monochromia.Program.Main(System.String[])
我看了一下我的主要方法(同样适用于其他机器),它看起来如下:
using System;
namespace Monochromia {
#if WINDOWS || XBOX
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
#endif
}
是否有任何地方我可以去了解一下具体哪个文件丢失?所以我可以试着弄清楚它为什么会突破。正如我所说,这对大约4-5个其他机器运行良好,我想其他机器上缺少一个常见元素,但我不确定从哪里开始寻找缺少的元素。
如果它帮助这里是从游戏的实际崩溃日志:
Version=1
EventType=APPCRASH
EventTime=130597875140383880
ReportType=2
Consent=1
ReportIdentifier=91cf3b49-6606-11e4-93c4-c8600067af2a
IntegratorReportIdentifier=91cf3b48-6606-11e4-93c4-c8600067af2a
WOW64=1
Response.type=4
Sig[0].Name=Application Name
Sig[0].Value=Monochromia.exe
Sig[1].Name=Application Version
Sig[1].Value=1.0.0.0
Sig[2].Name=Application Timestamp
Sig[2].Value=5459faaf
Sig[3].Name=Fault Module Name
Sig[3].Value=KERNELBASE.dll
Sig[4].Name=Fault Module Version
Sig[4].Value=6.1.7601.18409
Sig[5].Name=Fault Module Timestamp
Sig[5].Value=53159a86
Sig[6].Name=Exception Code
Sig[6].Value=e0434352
Sig[7].Name=Exception Offset
Sig[7].Value=0000c42d
DynamicSig[1].Name=OS Version
DynamicSig[1].Value=6.1.7601.2.1.0.768.3
DynamicSig[2].Name=Locale ID
DynamicSig[2].Value=3081
DynamicSig[22].Name=Additional Information 1
DynamicSig[22].Value=0a9e
DynamicSig[23].Name=Additional Information 2
DynamicSig[23].Value=0a9e372d3b4ad19135b953a78882e789
DynamicSig[24].Name=Additional Information 3
DynamicSig[24].Value=0a9e
DynamicSig[25].Name=Additional Information 4
DynamicSig[25].Value=0a9e372d3b4ad19135b953a78882e789
UI[2]=C:\Users\Admin1\Downloads\Release\Monochromia.exe
UI[3]=Monochromia has stopped working
UI[4]=Windows can check online for a solution to the problem.
UI[5]=Check online for a solution and close the program
UI[6]=Check online for a solution later and close the program
UI[7]=Close the program
LoadedModule[0]=C:\Users\Admin1\Downloads\Release\Monochromia.exe
LoadedModule[1]=C:\Windows\SysWOW64\ntdll.dll
LoadedModule[2]=C:\Windows\SYSTEM32\MSCOREE.DLL
LoadedModule[3]=C:\Windows\syswow64\KERNEL32.dll
LoadedModule[4]=C:\Windows\syswow64\KERNELBASE.dll
LoadedModule[5]=C:\Windows\syswow64\ADVAPI32.dll
LoadedModule[6]=C:\Windows\syswow64\msvcrt.dll
LoadedModule[7]=C:\Windows\SysWOW64\sechost.dll
LoadedModule[8]=C:\Windows\syswow64\RPCRT4.dll
LoadedModule[9]=C:\Windows\syswow64\SspiCli.dll
LoadedModule[10]=C:\Windows\syswow64\CRYPTBASE.dll
LoadedModule[11]=C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll
LoadedModule[12]=C:\Windows\syswow64\SHLWAPI.dll
LoadedModule[13]=C:\Windows\syswow64\GDI32.dll
LoadedModule[14]=C:\Windows\syswow64\USER32.dll
LoadedModule[15]=C:\Windows\syswow64\LPK.dll
LoadedModule[16]=C:\Windows\syswow64\USP10.dll
LoadedModule[17]=C:\Windows\system32\IMM32.DLL
LoadedModule[18]=C:\Windows\syswow64\MSCTF.dll
LoadedModule[19]=C:\PROGRA~2\KASPER~1\KASPER~1\mzvkbd3.dll
LoadedModule[20]=C:\PROGRA~2\KASPER~1\KASPER~1\sbhook.dll
LoadedModule[21]=C:\Windows\syswow64\ole32.dll
LoadedModule[22]=C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
LoadedModule[23]=C:\Windows\system32\MSVCR110_CLR0400.dll
LoadedModule[24]=C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07\mscorlib.ni.dll
LoadedModule[25]=C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
LoadedModule[26]=C:\Windows\syswow64\OLEAUT32.dll
LoadedModule[27]=C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll
FriendlyEventName=Stopped working
ConsentKey=APPCRASH
AppName=Monochromia
AppPath=C:\Users\Admin1\Downloads\Release\Monochromia.exe
看来我的问题是,尽管拥有.NET Framework的目标系统不包含来自http://www.microsoft.com/en-us/download/confirmation.aspx?id=27598的XNA Framework。我之所以选择这个,是因为我正在查看其他游戏的其他bug报告,并注意到与XNA制作的Terraria存在问题的人。它让我意识到我之前测试过的其他目标机器曾经在某些时候玩过Terraria,因此在游戏首次运行时会安装XNA Framework。
我可能不得不考虑将其捆绑在安装程序中,或者首先检查框架。问题解决了!
造成这种异常的代码是最有可能链接到处置game
对象。请注意,using
对象在using
块之后调用IDispose.Dispose()
,这可以解释为什么会在关闭期间发生这种情况。如果将using
语句包装在try-catch
块中,这应该会消失,但它可能无助于诊断问题。为了诊断,我建议在目标机器上进行调试,这样你就可以得到完整的异常堆栈跟踪,并且除此之外,制作一个发布版本的控制台,并将using
包装成一个try-catch
,如上所述, Exception.StackTrace进入控制台窗口进行查看。
try
{
using (Game1 game = new Game1())
{
game.Run();
}
}
catch(Exception E)
{
Console.WriteLine(e.StackTrace);
}
请注意,为您的测试程序提供调试版本也可能会有所帮助,以便堆栈跟踪或其他异常数据未被优化。