2010-11-05 17 views
9

registro de errores:"TypeInitializationException fue controlada"

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: 
código

Program.cs:

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; 
     } 
    } 
} 

parece que el problema es con Microsoft.Xna.Framework 3.1.0 inclusión, pero estoy seguro de que la ruta es correcta, y todos mis otros proyectos funcionan bien con esta configuración. Esto está en VS2008, C#, por cierto. Recuerdo que la última vez que tuve este problema, tuve que establecer una de las principales listas desplegables centrales en VS2008 a 'x86' y eso lo solucionó, pero ahora no hace ninguna diferencia.

+1

Haga clic en Depurar -> Excepciones y marque todas las casillas lanzadas. Esto te ayudará a determinar el problema. –

Respuesta

10

Es probable que tenga el mismo problema que tuvo la última vez. No puedo pensar en otra razón por la que recibirías esa excepción. Es probable que no haya implementado la corrección correctamente.

Tenga en cuenta que es la excepción interna lo que importa aquí. La excepción externa desaparecería si creó su Modelo en el cuerpo principal del programa en lugar de hacerlo durante la inicialización estática.

Así que su excepción es básicamente:

No se pudo cargar el ensamblado 'Microsoft.Xna.Framework'. El sistema no puede encontrar el archivo especificado.

Shawn Hargreaves writes que la excepción realmente significa:

No se pudo cargar el ensamblado de 32 bit 'Microsoft.Xna.Framework' en un proceso de 64 bits. Su proyecto de juego está configurado en la plataforma 'Cualquier CPU', cuando debe especificar 'x86'.

La solución es:

En la barra de herramientas de Visual Studio, debe haber un cuadro combinado decir "Cualquier CPU.

Si está utilizando C# Express, esta entrada de barra de herramientas puede aparecer atenuada. Para habilitarlo, vaya a 'Herramientas/Opciones', marque 'Mostrar todas las configuraciones', seleccione la pestaña 'Proyectos y soluciones' y marque la casilla 'Mostrar configuraciones avanzadas de compilación'.

Abra la barra de herramientas 'Cualquier CPU' y seleccione 'Administrador de configuración'. Abra el combo 'Plataforma de solución activa', elija '<New...>' y cree una configuración 'x86'.

6

Tuve el mismo error aparece en la primera línea de mi programa Main(), que había estado funcionando perfectamente durante días. No tenía nada que ver con cargar ensamblajes. El problema fue que accidentalmente pegué en una llamada a los métodos de la clase de utilidad estática en la sección de declaración de esa misma clase de utilidad. Ejemplo:

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

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

no entiendo por completo las vísceras internas de lo que sucede a la anterior, pero yo sabía que era el problema porque en cuanto me movía esa llamada a un método Init(), el TypeInitializationException desapareció .Supongo que mientras lo anterior sea legal desde un punto de vista del compilador, en el tiempo de ejecución encontró el uso de un método que aún no estaba definido. Como esto se usa como una clase totalmente estática, la clase no se "inicializa" dentro del mismo ámbito que todo lo demás, sino que de alguna manera se inicializa detrás de las escenas donde el flujo de excepción normal no está disponible.

¿Pensamientos?

+0

Estaba obteniendo la misma excepción que CodedMonkey. Tu solución funciona – user35443

+0

Para ponerlo simple: el error está en tu código. Depure la inicialización de la inicialización estática. Acabo de descubrir lo que estoy haciendo mal en mi inicialización. Como Jon. Black, sugiere, puede ayudar a organizar este código de inicialización en constructor estático, como primer paso en la depuración. – Oren

Cuestiones relacionadas