Trong .Net, tôi muốn liệt kê tất cả các assembly được nạp trên tất cả các AppDomain. Làm điều đó cho AppDomain của chương trình của tôi là đủ dễ dàng AppDomain.CurrentDomain.GetAssemblies()
. Tôi có cần bằng cách nào đó truy cập mọi AppDomain không? Hay đã có một công cụ thực hiện điều này?Làm cách nào để liệt kê tất cả các cụm được nạp?
Trả lời
Sử dụng Visual Studio
- Đính kèm một debugger để quá trình này (ví dụ như bắt đầu với gỡ lỗi hoặc Debug> Đính kèm để xử lý)
- Trong khi gỡ lỗi, hiển thị cửa sổ Modules (Debug> Windows> Mô-đun)
Điều này cung cấp chi tiết về từng miền, miền ứng dụng và có một vài tùy chọn để tải biểu tượng (tức là tệp pdb chứa thông tin gỡ lỗi).
Sử dụng Process Explorer
Nếu bạn muốn một công cụ bên ngoài bạn có thể sử dụng (phần mềm miễn phí, phát hành bởi Microsoft) Process Explorer
Nhấn vào một quá trình và nó sẽ hiển thị một danh sách với tất cả các hội đồng được sử dụng. Công cụ này là khá tốt vì nó cho thấy các thông tin khác như xử lý tập tin, vv
lập trình
Kiểm tra this SO câu hỏi đó giải thích làm thế nào để làm điều đó.
Nó thậm chí còn tốt hơn so với giải thích ở đây, bởi vì trong trang thuộc tính cho một quá trình, Process Explorer cho thấy chính xác mà AppDomain (bao gồm cả 'Shared Domain') hội đồng được nạp vào. Vì vậy, nó cho thấy nhiều hơn chỉ là dll được nạp vào quá trình này. Nó sẽ được tốt đẹp để biết những gì họ sử dụng API để hiển thị này (liên kết 'Programmatically' về sẽ chỉ cung cấp cho các hội đồng trong CurrentDomain). – Govert
Đây là những gì tôi đã kết thúc. Đó là danh sách tất cả các thuộc tính và phương thức, và tôi liệt kê tất cả các tham số cho mỗi phương thức. Tôi đã không thành công khi nhận được tất cả các giá trị.
foreach(System.Reflection.AssemblyName an in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()){
System.Reflection.Assembly asm = System.Reflection.Assembly.Load(an.ToString());
foreach(Type type in asm.GetTypes()){
//PROPERTIES
foreach (System.Reflection.PropertyInfo property in type.GetProperties()){
if (property.CanRead){
Response.Write("<br>" + an.ToString() + "." + type.ToString() + "." + property.Name);
}
}
//METHODS
var methods = type.GetMethods();
foreach (System.Reflection.MethodInfo method in methods){
Response.Write("<br><b>" + an.ToString() + "." + type.ToString() + "." + method.Name + "</b>");
foreach (System.Reflection.ParameterInfo param in method.GetParameters())
{
Response.Write("<br><i>Param=" + param.Name.ToString());
Response.Write("<br> Type=" + param.ParameterType.ToString());
Response.Write("<br> Position=" + param.Position.ToString());
Response.Write("<br> Optional=" + param.IsOptional.ToString() + "</i>");
}
}
}
}
btw ... Tôi loại trừ nó ra khỏi bài ban đầu, nhưng tôi lọc một số các câu trả lời như vậy 'foreach (Type gõ vào asm.GetTypes()) {\t \t \t \t \t \t if ((type.ToString() .IndexOf ("ACLASSIMLOOKINGFOR")> = 0) || (type.ToString(). IndexOf ("BCLASSIMLOOKINGFOR")> = 0)) {... ' – s15199d
Điều này không trả lời được câu hỏi nào cả. – Govert
Thay vì sử dụng GetExecutingAssembly(), tôi đã sử dụng GetEntryAssembly() để đảm bảo rằng tôi nhận được một danh sách tốt hơn các Assemblies được chương trình của tôi sử dụng. Nếu ExecutingAssembly xảy ra là một DLL, tôi sẽ bỏ lỡ một vài trong số chúng. –
- 1. Liệt kê tất cả virtualenv
- 2. Liệt kê tất cả các chỉ mục
- 3. Làm cách nào để liệt kê tất cả các chuỗi được quản lý bằng WinDBG?
- 4. Psql liệt kê tất cả các bảng
- 5. Liệt kê tất cả các kho SVN
- 6. Liệt kê các mô đun được nạp bằng gdb
- 7. Làm cách nào để liệt kê/liệt kê tất cả các ứng dụng đã cài đặt trong Windows XP?
- 8. Làm cách nào để liệt kê tất cả các yanks trong các emacs?
- 9. Làm thế nào để lập trình liệt kê tất cả các thuộc tính được xác định?
- 10. Cách liệt kê tất cả các ngày giữa hai ngày
- 11. Làm thế nào để liệt kê tất cả các hoạt động được ứng dụng tiếp xúc?
- 12. Cách liệt kê tất cả các thuộc tính của lớp
- 13. Làm cách nào để liệt kê tất cả các đăng ký của tôi bằng ClearCase?
- 14. Tôi làm cách nào để liệt kê tất cả các tiến trình đang chạy trong Windows?
- 15. Làm cách nào để liệt kê tất cả các bảng trong lược đồ trong Oracle SQL?
- 16. Làm cách nào để liệt kê tất cả các miếng đệm trong etherpad-lite
- 17. Làm cách nào để liệt kê tất cả các hoạt động WCF đang thực thi?
- 18. Applescript - liệt kê tất cả các ứng dụng đang chạy
- 19. Liệt kê tất cả các gói con của gói
- 20. Liệt kê tất cả các thư mục trong thư mục
- 21. AppleScript - Liệt kê tất cả các phông chữ
- 22. Liệt kê tất cả các bảng trong postgresql information_schema
- 23. liệt kê tất cả các quy trình trong iOS 5.0.1
- 24. Liệt kê tất cả các ổ đĩa vật lý (Windows)
- 25. Liệt kê tất cả các trang web trong IIS C#
- 26. Liệt kê tất cả các xử lý tệp đang mở?
- 27. Liệt kê tất cả các tệp trong gói homebrew
- 28. Liệt kê tất cả các hội đồng .NET có sẵn
- 29. Làm thế nào để viết một liệt kê của tất cả các chức năng tính toán?
- 30. Liệt kê tất cả các hàm dựng sẵn trong javascript?
Lưu ý rằng 'GetAssemblies()' sẽ không hoạt động, vì nó không đệ quy và sẽ bỏ qua bất kỳ tham chiếu lắp ráp lồng nhau nào. Tôi đã thêm một phiên bản đệ quy của 'GetAssemblies()' tại http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241. – Contango