У меня следующая ситуация:
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.