2012-05-28 21 views
9

Bir şifreleme aksamını dinamik olarak yüklemeye çalışıyorum ama doğru sınıf adını kullanmama rağmen GetType benim null döndürüyor. İşte bu kodla biraz başım ağrıyor. Sınıf herkese açık ve kesinlikle doğru şekilde yazdım.Assembly.GetType null döndürüyor

Şimdiden teşekkürler. Örneğin, bir tip tam bir ad belirtmelisiniz

+0

Bu sınıf nasıl ilan edilir? – Tigran

+0

VS'de Nesne Tarayıcısını kullanmayı unuttunuz. –

+0

@HansPassant - Evet, kesinlikle yaptım. Bu gece benim için gözaltı. – Ste

cevap

12

İşte

MessageBox.Show(t.FullName.ToString()); //FULLNAME 

baskı dışarı FullName tipi ve kullanımdan sonra, montajdan tür almak içinFullName.

+0

Teşekkürler. Bu benim için yaptı. 'FullName' bana "MyCompany.Library.Encryption" olduğunu söyledi. Birisi size bir dll e-postalar ve "kullanmak için şifreleme derleme" diyorsa ne olur? Utanç tüm cevapları kabul edemiyorum, diğerleri de isim alanına ihtiyacım olduğuna işaret etti. Onları da yakalıyorum. – Ste

+0

Ayrıca - sınıfta bir kurucu() olduğundan emin olun – timothy

4

deneyin (namespace.classname):

encryptionAssembly.GetType("My.Namespace.Encryption") 

kullanarak bunu bilemez t.FullName

+0

Eğer bilmiyorsanız reflektör ile aramayı deneyin – eyossi

+0

Bunun için teşekkürler. +1. Tigran'ın cevabını kabul etmek zorunda kaldım, çünkü bana “FullName” i belirlemenin en hızlı yolunu sağladı. – Ste

7

Şifreleme türü tam adını belirterek

+1

+1. Teşekkürler. Gelecekte tekrar kullanışlı olacak bir his var. – Ste

0

Derlememin çalışma zamanında tam adını bilmedim, ancak yalnızca derlemenin ExportedTypes öğesinden sınıf adını kullanarak türünü elde edebildim. Örneğin, "ClassName" bir ihracat türü almak için: Orada bu sadece ilk bir alacağı "ClassName" özdeş ada sahip birden türleri vardı, ama bu DLL dosyaları için güvenli bir çözüm ise

var assembly = Assembly.LoadFile(dllPath); 
var types = assembly.ExportedTypes; 
if(types != null) 
{ 
    var type = types.Where(x => x.Name == "ClassName").FirstOrDefault(); 
} 

Ben yüklüyorum.

0

Benim durumumda, projemde/.cs dosyası eksikti. Eksik cs dosyasını ekledim ve cazibe gibi çalıştı. ProjectA adlı bir cs projem var. Bu kod, ProjectA.ClassA tam sınıf adı arıyor. Bu hatayı aldığımda ProjectA'ya gittim ve ClassA.cs'in birleştirme sorunu nedeniyle eksik olduğunu gördüm. ClassA.cs'ı ProjectA'ya ekledim/ekledim ve iyi çalıştı.

İlgili konular