«Исключение TypeInitializationException было обработано» - PullRequest
9 голосов
/ 06 ноября 2010

Журнал ошибок:

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:

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

Кажется, проблема связана с включением Microsoft.Xna.Framework 3.1.0, но я уверен, что путь правильный, и все мои другие проекты работают нормально с этой настройкой.Это в VS2008, C #, кстати.Я помню, в прошлый раз, когда у меня была эта проблема, мне пришлось установить один из главных центральных выпадающих списков в VS2008 на «x86», и это исправило его, но теперь это не имеет значения.

Ответы [ 2 ]

10 голосов
/ 06 ноября 2010

Вероятно, у вас возникла та же проблема, что и у вас в прошлый раз.Я не могу придумать другую причину, по которой вы получите это исключение.Вероятно, вы не реализовали исправление правильно.

Обратите внимание, что здесь имеет значение внутреннее исключение.Внешнее исключение исчезнет, ​​если вы создали свою Модель в основной части программы, а не во время статической инициализации.

Таким образом, ваше исключение в основном:

Не удалось загрузить сборку «Microsoft.Xna.Framework».Системе не удается найти указанный файл.

Шон Харгривз пишет , что на самом деле означает исключение:

Не удалось загрузить 32-разрядную сборку 'Microsoft.Xna.Framework 'в 64-битный процесс.Ваш игровой проект настроен на платформу «Любой процессор», когда в нем должно быть указано «x86».

Исправление:

В вашемНа панели инструментов Visual Studio должно быть поле со списком «Любой процессор».

Если вы используете C # Express, эта запись панели инструментов может быть недоступна.Чтобы включить его, перейдите в «Инструменты / Параметры», выберите «Показать все настройки», выберите вкладку «Проекты и решения» и установите флажок «Показать расширенные конфигурации сборки».

Потяните вниз комбо панели инструментов «Любой процессор» и выберите «Диспетчер конфигурации».Откройте комбинацию «Active Solution platform», выберите «<New...>» и создайте конфигурацию «x86».

6 голосов
/ 14 июля 2012

У меня была та же ошибка, что и в первой строке моей программы Main (), которая отлично работала в течение нескольких дней.Это не имеет ничего общего с загрузкой сборок.Проблема заключалась в том, что я случайно вставил вызов метода статических служебных классов в разделе объявлений того же служебного класса.Пример:

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

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

Я не совсем понимаю внутренности того, что происходит с вышеупомянутым, но я знаю, что это была проблема, потому что, как только я переместил этот вызов в метод Init (),Исключение TypeInitializationException исчезло.Я предполагаю, что в то время как вышеупомянутое допустимо от POV компилятора, во время выполнения он столкнулся с использованием метода, который еще не был определен.Поскольку он используется как полностью статический класс, этот класс не «инициализируется» в той же области, что и все остальное, но каким-то образом инициализируется за кулисами, где обычный поток исключений недоступен.

...