2010-08-08 28 views
21

Tôi có mã sau bên trong Biểu mẫu và đang cố gắng tìm cách tải bản dự án được tham chiếu bằng biểu mẫu có tên DataObjects. Sử dụng mã sau đây, tôi chỉ nhận được sáu hội đồng được liệt kê. Nhìn vào các tài liệu tham khảo cho các dự án hình thức là trong, có mười ba tài liệu tham khảo lắp ráp. Có gì sai ở đây?GetReferencedAssemblies không trả lại tất cả các assembly

private void ListReferencedAssemblies() 
{ 
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); 
    foreach (var assembly in assemblies) 
    { 
     referencesListBox.Items.Add(assembly.Name); 
    } 
} 

Trả lời

28

Bạn có thể kiểm tra tệp kê khai của hội đồng để xem những gì được tham chiếu ở đây không?

Trình biên dịch C# có xu hướng loại bỏ các hội đồng được tham chiếu khỏi tệp kê khai nếu chúng không được sử dụng. Do đó, nếu bạn không tham khảo bất kỳ kiểu nào từ assembly B hoặc chỉ tham chiếu đến các hằng số từ assembly B (được biên dịch bởi trình biên dịch) thì bạn sẽ không có tham chiếu này.

+6

Có cách nào để buộc lắp ráp 'không sử dụng' được nạp? – ProfK

+0

Assembly.Load() nếu bạn biết vị trí tải trong miền hiện tại hoặc viết một số mã giả để tham chiếu đến các loại từ các hội đồng 'không sử dụng'. –

+2

Tôi tin rằng bạn (Tôi đang gặp vấn đề tương tự tại thời điểm này), nhưng bạn có một nguồn không? – edhedges

7

Trình biên dịch sẽ không bao gồm tham chiếu lắp ráp trong cụm đầu ra không thực sự được sử dụng trong mã.

Chỉ các hội đồng được sử dụng từ mã sẽ được tham chiếu trong hội đồng đầu ra.

+0

"không thực sự được sử dụng trong mã" - tôi nghĩ điều này nên được viết khác đi. Khi tôi gọi cái gì đó dựa vào sự hiện diện của các loại được phát hiện qua sự phản chiếu (trong trường hợp của tôi, thông qua MEF), những kiểu * này * được sử dụng. Nghĩa là, chúng sẽ được sử dụng, nếu trình biên dịch đã không loại bỏ tham chiếu và do đó làm cho ứng dụng của tôi gặp sự cố. –

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