Làm cách nào để có được các đường dẫn của tất cả các hội đồng được tham chiếu bởi hội đồng hiện đang thực hiện? GetReferencedAssmblies()
cho tôi số AssemblyName[]
s. Làm thế nào để tôi đến nơi họ được tải từ đó?Nhận các đường dẫn của tất cả các hội đồng được tham chiếu
Trả lời
Bạn không thể biết cho đến khi lắp ráp được tải. Thuật toán phân giải lắp ráp phức tạp và bạn không thể đoán trước được nó sẽ làm gì. Gọi số ghi đè Assembly.Load(AssemblyName)
sẽ giúp bạn tham chiếu đến hội đồng và thuộc tính Vị trí của nó cho bạn biết những gì bạn cần.
Tuy nhiên, bạn thực sự không muốn tải cụm lên phía trước, trước trình biên dịch JIT thực hiện điều đó. Đó là không hiệu quả và khả năng của các vấn đề không phải là số không. Ví dụ, bạn có thể kích hoạt sự kiện AppDomain.AssemblyResolve
trước khi chương trình sẵn sàng trả lời. Tránh hỏi câu hỏi này.
Rất cám ơn câu trả lời đúng. –
Thuộc tính CodeBase
phải cung cấp tên đường dẫn đầy đủ.
Bạn đã thử chưa? –
Thật không may, CodeBase trả về null trên mọi assembly được tham chiếu. :-) –
Bạn có thể có được vị trí URL của lắp ráp như thế này:
Assembly.GetExecutingAssembly().GetReferencedAssemblies()[0].CodeBase
CodeBase trả về null. Giải pháp nằm trong bài đăng mà JasonEvans liên kết trong nhận xét của anh ấy với bài đăng gốc. Ngoài ra, Hans Passant cũng có câu trả lời đúng. –
Theo dõi câu trả lời của Hans Passant và vì thuộc tính CodeBase
luôn chứa null
, tôi đã đưa ra điều này. Nó có thể không tìm thấy tất cả các hội đồng vì chúng có thể không phải tất cả đã được tải. Trong trường hợp của tôi, tôi đã phải tìm tất cả các tài liệu tham khảo của một hội đồng được nạp trước đó, vì vậy nó hoạt động tốt:
IEnumerable<string> GetAssemblyFiles(Assembly assembly)
{
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assemblyName in assembly.GetReferencedAssemblies())
yield return loadedAssemblies.SingleOrDefault(a => a.FullName == assemblyName.FullName)?.Location;
}
Cách sử dụng:
var assemblyFiles = GetAssemblyFiles(typeof(MyClass).Assembly);
- 1. Liệt kê tất cả các hội đồng .NET có sẵn
- 2. Lặp lại cấu hình trên các hội đồng tham chiếu
- 3. Nhận các đường dẫn của các cụm được sử dụng trong Loại
- 4. Quy tắc của các hội đồng được tham chiếu sao chép
- 5. Tìm loại trong tất cả các hội đồng
- 6. Có cách nào để buộc tất cả các hội đồng được tham chiếu phải được tải vào miền ứng dụng không?
- 7. Nhận các hội đồng phụ thuộc?
- 8. Tìm tất cả các đường dẫn trong biểu đồ được chỉ dẫn bằng các chu kỳ
- 9. Làm thế nào tôi có thể nhận được tất cả các tham chiếu với Reflection + C#
- 10. C# CompileAssemblyFromSource, thêm hội đồng tham chiếu cần thiết?
- 11. Nhận đường dẫn tuyệt đối của tất cả các tệp trong thư mục
- 12. Oracle tất cả các tham chiếu khóa ngoài
- 13. Tìm tất cả các tham chiếu trên Eclipse
- 14. Nhận đường dẫn của dự án được tham chiếu trong mẫu T4?
- 15. VisualVM - Tìm tất cả các tham chiếu đến một lớp
- 16. Nhận tất cả các phím được nhấn
- 17. Cập nhật đường dẫn tham chiếu cho tất cả các dự án trong một giải pháp cùng một lúc
- 18. pydev: tìm tất cả các tham chiếu đến hàm
- 19. Tham khảo các hội đồng khác nhau trong các cấu hình khác nhau
- 20. Tìm tất cả các bước trong đường dẫn thuộc tính
- 21. Tìm tất cả các tham chiếu của một dll trong một dự án
- 22. Một hội đồng Silverlight 5 có thể tham chiếu đến một hội đồng Silverlight 4 không?
- 23. Nhận loại trong hội đồng tham chiếu bằng cách cung cấp tên lớp dưới dạng chuỗi?
- 24. dự án cài đặt VS 2010 không mang hội tham chiếu chung cho tất cả các kết quả đầu ra
- 25. Ứng dụng tham chiếu Microsoft.SqlServer.Smo yêu cầu các hội đồng bổ sung cần được đưa vào Máy mục tiêu?
- 26. Sử dụng WiX để đặt một hội đồng vào cả GAC và Đường dẫn Cài đặt
- 27. Làm thế nào để có được các lĩnh vực và các giá trị của họ từ một lớp tĩnh trong hội đồng tham chiếu
- 28. động Tải hội và tự buộc con đường để có được lắp ráp tham chiếu
- 29. C#/NHibernate: Các tham chiếu của hiệp hội chưa được ánh xạ lớp
- 30. Tóm tắt không hiển thị trong hội đồng nếu nó được thêm làm tham chiếu
Hãy thử điều này http://stackoverflow.com/questions/1582510/ get-pathes-of-assemblies-sử dụng-in-type –
Rất cám ơn. Điều đó giải quyết nó cho tôi. –
Để biết ví dụ đầy đủ về cách lấy tất cả các hội đồng được tham chiếu, đệ quy, hãy xem http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241. – Contango