Как я должен принудительно загрузить ссылочную сборку?

У меня есть сторонняя библиотека, которая требует загрузки сборки A, когда я вызываю их код. Эта сборка обычно устанавливается в GAC, поэтому у меня есть несколько вариантов ее загрузки:

  1. Я могу явно позвонить Assembly.Load(), Однако для этого требуется полное имя, которое я не чувствую себя комфортно для жесткого кода в моей программе.
  2. Я могу явно позвонить Assembly.LoadWithPartialName(), Конечно, это устаревший API, и, конечно, я не чувствую себя комфортно, теряя контроль над версиями.
  3. Я могу ссылаться на сборку в моем файле проекта Visual Studio, поэтому я всегда получаю версию, с которой я собрал. Однако это не сработает, если я не создам фиктивный объект в этой сборке. Компилятор C# просто игнорирует это, если я не делаю.
  4. Та же проблема, если я позвоню Assembly.GetReferencedAssemblies и принудительно загрузить соответствующий. Компилятор C# просто не будет ссылаться на мою сборку, даже если я добавлю ее в список ссылок.

Теперь я звоню typeof(A.Foo).Assembly.GetName() и игнорировать возвращаемое значение. Есть ли лучший способ сделать это?

1 ответ

Решение

Вариант 1, для меня, будет ссылаться на него в проекте VS.

Но если вам нужен более пассивный подход, вы можете использовать обработчик событий AppDomain.CurrentDomain.AssemblyResolve. Он выполняется, когда требуется сборка, которая не найдена в домене приложения. Аргументы события сообщат вам искомую сборку, и вы можете взять ее в этот момент, используя Assembly.Load()

Другие вопросы по тегам