2010-05-07 30 views
17

Hãy xem xét chúng tôi có ứng dụng .NET Winforms hoặc Ứng dụng Giao diện điều khiển. Bất cứ ai có thể cho tôi biết điều gì sẽ xảy ra từng bước cho đến khi ứng dụng WinForm hoặc Console được khởi chạy. Tôi muốn biết nội bộ - như thế nào EXE sẽ giao tiếp với Framework, vai trò của CLR, những gì xảy ra trong trường hợp ngoại lệ trong khi tung ra applicaiton chính nó.etc ...Điều gì xảy ra khi người dùng nhấp vào .NET assembly (EXE)?

+6

Là câu trả lời chính xác? Có những cuốn sách viết về điều đó dài hàng trăm trang;) – TomTom

+5

@TomTom - Đó không phải là rất công bằng! ... đó là những phiên bản rút gọn. –

+2

1. Tải xuống Mono. 2. Biên dịch nó. 3. Bắt đầu nó dưới một trình gỡ lỗi. 4. Bước đơn. 5. Lặp lại bước 4. –

Trả lời

13

Khi bạn kích đúp bấm vào một hội đồng .exe .net:

  • Windows đá PE loader trong
  • Nếu bạn đang ở trên một Windows> = Windows XP nó sẽ phát hiện rằng thực thi là một quản lý thực thi và sẽ chuyển tiếp nó tới .net bằng cách gọi _CoreExeMain trong mscoree.dll (_CoreDllMain nếu bạn nhấp đúp vào một .dll được quản lý). Nó có thể sử dụng tập tin cấu hình lắp ráp để biết thời gian chạy để sử dụng.
  • Nếu bạn đang sử dụng Windows < Windows XP, tệp .exe chứa một đoạn mã gốc nhỏ sẽ chuyển đến _CoreExeMain hoặc _CoreDllMain của mscoree.dll.
  • Sau đó, mscoree.dll khởi tạo thời gian chạy .net, tùy thuộc vào cấu hình chung, tệp cấu hình lắp ráp và những gì không.
  • Sau đó, nếu nó là một .exe, nó sẽ JIT biên dịch phương pháp điểm nhập của nó, và bắt đầu thực hiện nó.
+0

Điều này thật tuyệt. Cảm ơn câu trả lời của bạn Jb Evain! – Sathish

1

MSCoreEE.dll (Công cụ thực thi MSCore.Dll chỉ một phiên bản cho một máy) Ví dụ: khi lắp ráp .Net/.exe được nhấp đúp hoặc khởi chạy, Hệ điều hành sẽ tải trình tải cửa sổ inturn tải tiêu đề PE (Portable executable) [trong trường hợp win32 thực thi được, tiêu đề PE sẽ chứa địa chỉ của bootstrap (static Main()) từ nơi nó sẽ tải và thực thi phương thức main, ở đâu trong .Net, bootstrap sẽ chứa địa chỉ của MSCoreEE.Dll sẽ có trong C: \ Windows \ System32 \ mscoree.dll sẽ được thực hiện và tải thời gian chạy .Net mà assembly .net được nhắm tới. Có thể có nhiều phiên bản .Net runtime được cài đặt trên máy, tuy nhiên, sẽ chỉ có một phiên bản của mscoreee.dll để tải các runtimes cụ thể.

Các CLR sẽ tạo ra miền APP đầu tiên bản thân và tải lắp ráp (nếu lắp ráp đã không tạo ra lĩnh vực ứng dụng bổ sung trong code)

Các CLR tạo 3 Application Domains nội 1. Hệ thống App miền một .  chịu trách nhiệm tải các miền ứng dụng được chia sẻ và mặc định, cũng tải mscorelib.dll vào miền ứng dụng được chia sẻ b.  Tạo 3 trường hợp ngoại lệ cho các trường hợp ngoại lệ i. Ngoại lệ động cơ gây tử vong ii. Ngoại lệ tràn ngăn xếp iii. Hết bộ nhớ ngoại lệ (rất quan trọng, CLR đặt trước bcose “hết bộ nhớ” khi nhà phát triển cho rằng ứng dụng có thể hết bộ nhớ và muốn ghi ngoại lệ vào một tệp nhật ký, việc tạo ra ngoại lệ bộ nhớ sẽ xảy ra vì có không còn bộ nhớ để tạo một trường hợp ngoại lệ mới, vì vậy, CLR xử lý trước ngoại lệ này để sử dụng trong tương lai trong ứng dụng 2. Tên miền ứng dụng được chia sẻ a. Có chứa mscorlib.dll b.Các thư viện phổ biến khác được sử dụng bởi các miền ứng dụng khác c. Tuy nhiên, nhà phát triển không thể đẩy Dll tùy chỉnh vào miền ứng dụng được chia sẻ vì không thể điều khiển từ bên ngoài CLR, CLR lưu trữ các dll và CLR này không thể kiểm soát cách nó được lưu trữ bởi nhà phát triển. nơi nhà phát triển có thể lưu trữ thông lệ CLR 3. Miền ứng dụng mặc định a. Tất cả các tệp nhị phân của người dùng .exe, Dll được tải tại đây

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