На самом деле я пытался реализовать какие-то «статически связанные» сборки в своем решении. Поэтому я попробовал следующее:
- Добавление ссылки на мою сборку с помощью CopyLocal = false
- Добавление самого файла .dll в мое решение с помощью команды «Добавить как ссылку»
- Добавление самого DLL-файла к моим ресурсам с помощью «Добавить ресурс» - «Добавить существующий файл»
- Добавление некоторого типа из моей сборки в Form1 как
private MyObject temp = new MyObject();
После этих шагов я получил FileNotFoundException, как и ожидалось. Итак, давайте попробуем загрузить сборку в AssemblyResolveEvent с помощью этого быстрого хака
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
Assembly MyAssembly = AppDomain.CurrentDomain.Load(Properties.Resources.ExternalAssembly);
return MyAssembly;
};
Так что это работает! Я могу загрузить свою сборку из файла ресурсов в AssemblyResolveEvent. Но это событие происходит только в том случае, если оно не может найти мою сборку где-либо еще. Но как я могу загрузить свою сборку до того, как .Net попытается найти разные места ??
В связи с фактами из Проверка ранее ссылающихся сборок Я думал, что можно было бы заранее загрузить сборку в домен, и это будет сделано.
Я пробовал это в program.cs, используя следующий метод Main ()
static void Main()
{
LoadMyAssemblies();
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => LoadMyAssemblies();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
private static Assembly LoadMyAssemblies()
{
Assembly result = AppDomain.CurrentDomain.Load(Properties.Resources.MyStaticAssembly);
return result;
}
Но он все еще сталкивается с ResolveEventHandler. И что еще лучше, если я снова загружу сборку и взгляну на AppDomain.CurrentDomain.GetAssemblies () , я вижу, что моя сборка загружается дважды !!
Так что любая идея, почему моя загруженная сборка не будет учтена при загрузке до события AssemblyResolve ?? С помощью отладчика я также возвратил нулевое значение, когда вызов поступил из AssemblyResolve, но в этом случае я получил FileNotFoundException как в начале.