Доброго времени суток всем читателям.
Вот с такой проблемой я столкнулся и никак не могу разобраться как с ней бороться при использовании вышеперечисленных методов загрузки сборок.
Итак, поехали. Есть папка и в ней три сборки:
plugins/myplugin/Main.dll
plugins/myplugin/A.dll
plugins/myplugin/B.dll
Сборки зависят друг от друга так:
A используется в B
A и B использует в Main
Сборка 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");
То все заработает. Но мне не хочется сохранять расшифрованную сборку на системном диске...