Про Assembly.Load и Assembly.LoadFrom
От: DragonFire Россия  
Дата: 12.02.11 09:29
Оценка:
Доброго времени суток всем читателям.
Вот с такой проблемой я столкнулся и никак не могу разобраться как с ней бороться при использовании вышеперечисленных методов загрузки сборок.

Итак, поехали. Есть папка и в ней три сборки:
Сборки зависят друг от друга так:

Сборка Main лежит в зашифрованном виде, поэтому в методе загрузки сборок я пишу такой код:
Byte[] assemblyBytes = CryptoManager.Unpack(AssemblyPath, AssemblyName);
Assembly plugInAssembly = Assembly.Load(assemblyBytes);                
foreach (var refAssembly in plugInAssembly.GetReferencedAssemblies())
{
    Assembly.LoadFrom(AssemblyPath + refAssembly.Name);
}


После этого в списке загруженных модулей появляются следующие записи:
<...>
MainApplication
Main
A
B
<...>


НО при попытке создать класс из Main, который ссылается на класс из A вываливается исключение: сборка A не найдена... Хотя она поидее загружена в домен! Как такое может быть?

Естественно, если написать такой код, вместо предыдущего:
Byte[] assemblyBytes = CryptoManager.Unpack(AssemblyName);
File.WriteAllBytes(AssemblyName + ".pack", assemblyBytes);
Assembly plugInAssembly = Assembly.LoadFrom(AssemblyName + ".pack");

То все заработает. Но мне не хочется сохранять расшифрованную сборку на системном диске...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.