2010-11-05 29 views
9

Lỗi Log:"TypeInitializationException là unhandled"

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 mã:

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

Có vẻ như vấn đề là với Microsoft.Xna.Framework 3.1.0 bao gồm, nhưng tôi chắc chắn rằng đường dẫn là chính xác, và tất cả các dự án khác của tôi hoạt động tốt với thiết lập này. Đây là trong VS2008, C#, btw. Tôi nhớ lần cuối cùng tôi có vấn đề này, tôi đã phải thiết lập một trong những danh sách thả xuống trung tâm hàng đầu trong VS2008 để 'x86' và cố định nó, nhưng bây giờ nó làm cho không có sự khác biệt.

+1

Nhấp vào Gỡ lỗi -> Ngoại lệ và chọn BẬT tất cả các hộp kiểm Đã phát. Điều này sẽ giúp bạn xác định vấn đề. –

Trả lời

10

Có thể bạn đang gặp vấn đề tương tự như lần trước. Tôi không thể nghĩ ra một lý do khác mà bạn sẽ nhận được ngoại lệ đó. Có thể bạn chưa triển khai sửa lỗi chính xác.

Lưu ý rằng đó là ngoại lệ bên trong quan trọng ở đây. Ngoại lệ bên ngoài sẽ biến mất nếu bạn đã tạo Mô hình của mình trong phần chính của chương trình thay vì trong quá trình khởi tạo tĩnh.

Vì vậy, ngoại trừ của bạn về cơ bản là:

Không thể tải lắp ráp 'Microsoft.Xna.Framework'. Hệ thống không thể tìm thấy các tập tin được chỉ định.

Shawn Hargreaves writes rằng ngoại trừ thực sự có nghĩa là:

Không thể tải chút lắp ráp 32 'Microsoft.Xna.Framework' vào một quá trình 64 bit. Dự án trò chơi của bạn được đặt thành nền tảng 'CPU bất kỳ', khi cần chỉ định 'x86'.

Việc sửa chữa là:

Trong Visual Studio thanh công cụ của bạn, cần có một combo box nói 'Bất kỳ CPU.

Nếu bạn đang sử dụng C# Express, mục nhập thanh công cụ này có thể chuyển sang màu xám. Để bật tính năng này, hãy chuyển đến 'Công cụ/Tuỳ chọn', chọn 'Hiển thị tất cả cài đặt', chọn tab 'Dự án và Giải pháp' và chọn hộp 'Hiển thị cấu hình nâng cao'.

Kéo xuống thanh công cụ 'Mọi CPU' và chọn 'Trình quản lý cấu hình'. Mở tổ hợp 'Nền tảng giải pháp tích cực', chọn '<New...>' và tạo cấu hình 'x86'.

6

Tôi đã gặp lỗi tương tự xuất hiện ngay trên dòng đầu tiên của chương trình Main(), đã hoạt động hoàn hảo trong nhiều ngày. Nó không liên quan gì đến việc tải các hội đồng. Vấn đề là tôi đã vô tình dán trong một cuộc gọi đến một lớp tiện ích tĩnh 'phương pháp trong phần khai báo của cùng một lớp tiện ích. Ví dụ:

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

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

tôi không hoàn toàn hiểu được ruột bên trong của những gì xảy ra ở trên, nhưng tôi biết nó là vấn đề bởi vì ngay sau khi tôi chuyển cuộc gọi đó vào một phương pháp Init(), các TypeInitializationException biến mất .Tôi đoán là trong khi ở trên là hợp pháp từ một POV trình biên dịch, tại thời gian chạy nó gặp phải sử dụng một phương pháp mà chưa được xác định. Vì điều này được sử dụng như là một lớp hoàn toàn tĩnh, lớp không được "khởi tạo" trong phạm vi tương tự như mọi thứ khác, nhưng bằng cách nào đó đã khởi tạo phía sau các cảnh mà luồng ngoại lệ bình thường không có sẵn.

Suy nghĩ?

+0

Tôi đã nhận được ngoại lệ giống như CodedMonkey. Giải pháp của bạn hoạt động. – user35443

+0

Để đơn giản: lỗi nằm trong mã của bạn. Gỡ lỗi khởi tạo khởi tạo tĩnh. Tôi vừa phát hiện ra những gì tôi đang làm sai khi khởi tạo. Như Jon. Đen, gợi ý, nó có thể giúp tổ chức mã khởi tạo này trong hàm dựng tĩnh, là bước đầu tiên trong quá trình gỡ lỗi. – Oren

Các vấn đề liên quan