2010-02-23 104 views
8

Bazı Arabirimler içeren bir Arabirim Library1.dll derleme, veritabanına bayt dizisi olarak serileştirildi. Bazı nedenlerden dolayı Arayüz özelliklerini ve tanımını değiştirmeliyiz. şimdi bir göç programı yazarım. Yani ben Library1.dll, 2 sürümleri var Benim yardımcı programında ben Library1.dll yeni sürümünü saklamak bir klasör oluşturduk. Bu yardımcı da sırayla Library1.dll başvuruları bin klasörde Library1.dll içerir, ancak bu dll eski sürümde derlenmiştir. Library1.dll'un yeni sürümüm, yüklüyüm ve GetTypes yüklendikten sonra veri dönüştürmeyi etkinleştirecek olan Assembly.ReflectionOnlyLoadFrom işlevine aktardığım özel bir yolda depolanır.Assembly.ReflectionOnlyLoadFrom çalışmıyor

Ancak, özel bir yoldan Library1.dll yüklenmeye çalışırken her zaman ReflectionTypeLoadException alırım.

Lütfen yardım edin! herhangi bir yardım takdir edilecektir. Gerçekten sıkışmışım. harici bir türünü kullanan bir tip çarptığında

sayesinde AG

+0

ReflectionOnlyLoadFromException öğesindeki LoaderExceptions nedir? http://blogs.msdn.com/suzcook/archive/2003/08/11/57236.aspx –

+0

"Göç" yapmaya çalıştığınız şey nedir? Veri? veya dll kendisi? –

+0

Veri aktarmaya çalışırken – netmatrix01

cevap

16

Kütüphane başka dll başvuran ise GetTypes başarısız olur. Normal montaj yüklemesinden farklı olarak, ReflectionOnly Assembly yüklemesi bağımlılıkları çözmez. AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve'a abone olabilir ve bağımlılıkları gerektiği gibi yükleyebilir veya bunları önceden yükleyebilirsiniz.

Bu

Bunun için kullandığınız koddur:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath); 
foreach (var assemblyName in assembly.GetReferencedAssemblies()) { 
    try { 
    Assembly.ReflectionOnlyLoad(assemblyName.FullName); 
    } catch { 
    Assembly.ReflectionOnlyLoadFrom(Path.Combine(Path.GetDirectoryName(assemblyPath), assemblyName.Name + ".dll")); 
    } 
} 

Sonra bu yol ile (bağımlılık aynı olduğunu varsayarak, tamadın ilk yansıması sadece yüklenen derleme tüm bağımlılıklarını yüklemeye çalışacaktır Yüklenen derleme olarak dizin).

+0

Arne: Bize burada çok yardımcı oldunuz. Kafalarımızı duvara çarparak çok zorluyorduk. –

+0

ReflectionOnlyAssemblyResolve kullanan örnek kod için http://blogs.msdn.com/b/junfeng/archive/2004/08/24/219691.aspx konusuna bakın. –