Как получить ссылку на сборку, в которой создан экземпляр класса - PullRequest
0 голосов
/ 09 апреля 2011

У меня следующая ситуация:

  • Assembly A - библиотека классов, содержит мой элемент управления Control A.
    • Control A имеет свойство ResourceName.
  • Assembly B - приложение Winforms, содержит ресурсы для брендинга (изображения, строки и т. Д.).Assembly B ссылается на Assembly A и использует его собственные элементы управления.
  • Solution - содержит файлы проектов сборок A и B.

Control A находит ресурс ResourceName с использованием GetEntryAssembly () для получения ссылки на сборку, который работает во время выполнения, но во время разработки я предполагаю, что сборка ввода devenv.exe или что-то подобное, поэтому он не работает.

В идеале я должен быть в состоянии загрузить сборку, которая создала (создал) элемент управления.

Я мог бы даже ввести новое свойство Control A AssemblyName, но мне понадобится полный путь для его загрузки, и я не могу добраться до пути сборки B из кода во время разработки.

РЕДАКТИРОВАТЬ: Благодаря Ричарду я теперь использую Assembly.GetCallingAssemby () в конструкторе элемента управления и кэширую значение в закрытом поле, которое является более универсальным, чем GetEntryAssembly. К сожалению, оно все еще не работает во время разработки(Я получаю System.dll в качестве вызывающей сборки).Я подозреваю, что это потому, что VS дизайнер не создает экземпляр всего класса, а только часть .designer.cs.

1 Ответ

2 голосов
/ 09 апреля 2011

Легко получить сборку, которая реализует тип (System.Type имеет свойство Assembly).Но единственный раз, когда вы можете получить вызывающего метода в этом методе.

Таким образом, вы можете получить вызывающую сборку конструктора при выполнении конструктора.это с IntelliTrace (если у вас VS Ultimate), вы не можете вернуться назад во времени, чтобы позже получить трассировку стека.

...