2010-11-05 5 views
9

Fehlerprotokoll:"TypeInitializationException wurde nicht behandelt"

System.TypeInitializationException was unhandled 
    Message="The type initializer for 'MaxDavidMP4.Program' threw an exception." 
    Source="MaxDavidMP4" 
    TypeName="MaxDavidMP4.Program" 
    StackTrace: 
     at MaxDavidMP4.Program.Main() 
     at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.IO.FileNotFoundException 
     Message="Could not load file or assembly 'Microsoft.Xna.Framework, Version=3.1.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d' or one of its dependencies. The system cannot find the file specified." 
     Source="MaxDavidMP4" 
     FileName="Microsoft.Xna.Framework, Version=3.1.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" 
     FusionLog="=== Pre-bind state information ===\r\nLOG: User = Max-PC\\Max\r\nLOG: DisplayName = Microsoft.Xna.Framework, Version=3.1.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d\n (Fully-specified)\r\nLOG: Appbase = file:///C:/Users/Max/Desktop/maximas save/School/University/CSS 450/MaxDavidMP4/MaxDavidMP4/bin/Debug/\r\nLOG: Initial PrivatePath = NULL\r\nCalling assembly : UWBGL_XNA_Lib10, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.\r\n===\r\nLOG: This bind starts in default load context.\r\nLOG: No application configuration file found.\r\nLOG: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\config\\machine.config.\r\nLOG: Post-policy reference: Microsoft.Xna.Framework, Version=3.1.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d\r\nLOG: The same bind was seen before, and was failed with hr = 0x80070002.\r\n" 
     StackTrace: 
      at MaxDavidMP4.Model..ctor() 
      at MaxDavidMP4.Program..cctor() in C:\Users\Max\Desktop\maximas save\School\University\CSS 450\MaxDavidMP4\MaxDavidMP4\Program.cs:line 14 
     InnerException: 

Program.cs Code:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace MaxDavidMP4 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     /// 
     static Model model = new Model(); 

     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 

     public static Model getModel() 
     { 
      return model; 
     } 
    } 
} 

Es scheint, das Problem mit Microsoft.Xna.Framework ist 3.1.0 Aufnahme, aber ich bin sicher, dass der Pfad korrekt ist, und alle meine anderen Projekte funktionieren gut mit diesem Setup. Dies ist in VS2008, C#, BTW. Ich erinnere mich an das letzte Mal, als ich dieses Problem hatte, musste ich eine der oberen zentralen Dropdown-Listen in VS2008 auf "x86" setzen und das hat es behoben, aber jetzt macht es keinen Unterschied.

+1

Klicken Sie auf Debug -> Exceptions, und aktivieren Sie alle Kontrollkästchen "Thrown". Dies wird Ihnen helfen, das Problem zu bestimmen. –

Antwort

10

Wahrscheinlich haben Sie das gleiche Problem wie beim letzten Mal. Ich kann mir keinen anderen Grund vorstellen, warum Sie diese Ausnahme bekommen würden. Wahrscheinlich haben Sie den Fix nicht korrekt implementiert.

Beachten Sie, dass es die innere Ausnahme ist, die hier zählt. Die äußere Ausnahme würde verschwinden, wenn Sie Ihr Modell im Hauptteil des Programms und nicht während der statischen Initialisierung erstellt hätten.

So Ihre Ausnahme ist im Grunde:

nicht Assembly laden konnte 'Microsoft.Xna.Framework'. Die angegebene Datei wurde vom System nicht gefunden.

Shawn Hargreaves writes dass die Ausnahme wirklich bedeutet:

nicht 32-Bit-Baugruppe laden kann 'Microsoft.Xna.Framework' in einen 64-Bit-Prozess. Ihr Spielprojekt ist auf 'Any CPU' Plattform gesetzt, wenn es 'x86' angeben soll.

Das Update ist:

in Ihrem Visual Studio-Symbolleiste, sollte es ein Kombinationsfeld sagen: 'Any CPU'.

Wenn Sie C# Express verwenden, ist dieser Symbolleisteneintrag möglicherweise ausgegraut. Um es zu aktivieren, gehen Sie zu "Extras/Optionen", aktivieren Sie "Alle Einstellungen anzeigen", wählen Sie die Registerkarte "Projekte und Lösungen" und aktivieren Sie das Kontrollkästchen "Erweiterte Build-Konfigurationen anzeigen".

Ziehen Sie die Combo "Beliebige CPU" und wählen Sie "Configuration Manager". Öffnen Sie das Kombinationsfeld "Aktive Lösungsplattform", wählen Sie "<New...>" und erstellen Sie eine "x86" -Konfiguration.

6

Ich hatte den gleichen Fehler direkt in der ersten Zeile meines Programms Main(), die seit Tagen perfekt funktioniert hatte. Es hatte nichts mit dem Laden von Baugruppen zu tun. Das Problem war, dass ich versehentlich einen Aufruf an die Methoden einer statischen Hilfsklasse in den Deklarationsabschnitt der gleichen Dienstprogrammklasse eingefügt hatte. Beispiel:

public class Utility 
{ 
    public static int i = Utility.SomeStaticMethod(); 

    public static int SomeStaticMethod() 
    { 
     return 1; 
    } 
} 

Ich verstehe nicht ganz die inneren Eingeweide von dem, was auf die oben passiert, aber ich weiß, es war das Problem, denn sobald ich diesen Anruf in einen Init() -Methode bewegte, verschwand die TypeInitializationException .Meine Vermutung ist, während das obige Recht von einem Compiler-POV zugelassen ist, zur Laufzeit die Verwendung einer Methode, die noch nicht definiert wurde. Da dies als eine vollständig statische Klasse verwendet wird, wird die Klasse nicht innerhalb des gleichen Umfangs wie alles andere "initialisiert", sondern irgendwie hinter den Kulissen initialisiert, wo der normale Ausnahmefluss nicht verfügbar ist.

Gedanken?

+0

Ich bekam dieselbe Ausnahme wie CodedMonkey. Deine Lösung funktioniert. – user35443

+0

Um es einfach zu sagen: Der Fehler ist in Ihrem Code. Debuggen Sie die Initialisierung der statischen Initialisierung. Ich habe gerade entdeckt, was ich bei meiner Initialisierung falsch mache. Wie Jon. Schwarz, schlägt vor, es könnte helfen, diesen Initialisierungscode im statischen Konstruktor als den ersten Schritt im Debuggen zu organisieren. – Oren

Verwandte Themen