是什么导致我的发布版本崩溃(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); 
} 

请注意,为您的测试程序提供调试版本也可能会有所帮助,以便堆栈跟踪或其他异常数据未被优化。