2010-01-30 26 views
6

Làm thế nào bạn có thể xác định xem một hội đồng .Net cụ thể đã được ngen'd hay không? Tôi cần phải kiểm tra từ mã. Thậm chí việc gọi dòng lệnh cũng sẽ ổn. Tại thời điểm này tôi không thể nhìn thấy bất kỳ cách nào để xác định điều này.Làm thế nào để xác định xem lắp ráp đã được ngen'd?

+0

Trong mã? Từ dòng lệnh? Tương tác? Gì? Nó phải nằm trong các thuộc tính tệp ở đâu đó ... –

Trả lời

3

Bạn có thể tìm cách lắp ráp trong "bộ nhớ cache ngen" (C: \ Windows \ assembly \ NativeImages_v2XXXXXXX).

Cụm được lắp ráp sẽ có tên định dạng sau: [tên cơ sở]. ni. [Baseextension].

+0

Windows 7 dường như lưu trữ chúng là một vị trí hơi khác và không có '.ni'. trong tên: C: \ Windows \ assembly –

+0

Rất lạ. Tôi đã cài đặt Windows 7 và đường dẫn "ngen tiền" là "C: \ Windows \ assembly \ NativeImages_v2.0.50727_32 \". – Sasha

4

Kiểm tra Từ Mã

Kiểm tra xem chúng tôi đang tải một hình ảnh bản địa cho các assembly thực hiện. Tôi đang tìm mẫu "\ assemblyname.ni" trong thuộc tính tên tệp được nạp.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 
using System.Diagnostics; 

namespace MyTestsApp 
{ 
    class Program 
    { 
     static bool Main(string[] args) 
     { 

      Process process = Process.GetCurrentProcess(); 

      ProcessModule[] modules = new ProcessModule[process.Modules.Count]; 
      process.Modules.CopyTo(modules,0); 

      var niQuery = from m in modules where m.FileName.Contains("\\"+process.ProcessName+".ni") select m.FileName; 
      bool ni = niQuery.Count()>0 ?true:false; 

      if (ni) 
      { 
       Console.WriteLine("Native Image: "+niQuery.ElementAt(0)); 
      } 
      else 
      { 
       Console.WriteLine("IL Image: " + process.MainModule.FileName); 
      } 

      return ni; 
     } 
    } 
} 

Command Line Giải pháp:

Run "ngen hiển thị" trên cửa sổ lệnh.

Ví dụ:

hiển thị ngen MyTestsApp.exe

Nếu cài đặt, nó sẽ in ra một cái gì đó giống như hình ảnh Quê quán: MyTestsApp, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = null

và trả về 0 (% errorlevel%)

Nếu không, nó sẽ in ra:

Lỗi: Cụm được chỉ định chưa được cài đặt.

và trả lại -1

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