Как я должен принудительно загрузить ссылочную сборку?
У меня есть сторонняя библиотека, которая требует загрузки сборки A, когда я вызываю их код. Эта сборка обычно устанавливается в GAC, поэтому у меня есть несколько вариантов ее загрузки:
- Я могу явно позвонить
Assembly.Load()
, Однако для этого требуется полное имя, которое я не чувствую себя комфортно для жесткого кода в моей программе. - Я могу явно позвонить
Assembly.LoadWithPartialName()
, Конечно, это устаревший API, и, конечно, я не чувствую себя комфортно, теряя контроль над версиями. - Я могу ссылаться на сборку в моем файле проекта Visual Studio, поэтому я всегда получаю версию, с которой я собрал. Однако это не сработает, если я не создам фиктивный объект в этой сборке. Компилятор C# просто игнорирует это, если я не делаю.
- Та же проблема, если я позвоню
Assembly.GetReferencedAssemblies
и принудительно загрузить соответствующий. Компилятор C# просто не будет ссылаться на мою сборку, даже если я добавлю ее в список ссылок.
Теперь я звоню typeof(A.Foo).Assembly.GetName()
и игнорировать возвращаемое значение. Есть ли лучший способ сделать это?
1 ответ
Решение
Вариант 1, для меня, будет ссылаться на него в проекте VS.
Но если вам нужен более пассивный подход, вы можете использовать обработчик событий AppDomain.CurrentDomain.AssemblyResolve. Он выполняется, когда требуется сборка, которая не найдена в домене приложения. Аргументы события сообщат вам искомую сборку, и вы можете взять ее в этот момент, используя Assembly.Load()