У меня есть некоторые ресурсы (в данном случае изображения) в файле ресурсов, которые я использую для элементов управления в моем проекте Windows Forms. Диалог выбора ресурсов Visual Studio не очень хорошо поддерживает выбор изображений из файлов ресурсов, если они не находятся в определенных местах, но вы можете редактировать файл конструктора напрямую, и это прекрасно работает; приложение компилируется и работает правильно, а конструктор Windows Forms достаточно умен, чтобы не испортить мой отредактированный код.
// in an assembly named ResourceConsumer
this.button1.Image = global::ResourceConsumer.Properties.Resources.Close32x32;
Теперь я хочу переместить эти ресурсы во внешнюю сборку, чтобы они могли использоваться несколькими приложениями. Я могу настроить сборку так, чтобы она без проблем открывала доступ к ее ресурсам (если я использую Visual Studio 2008 или более позднюю версию), и это прекрасно работает. Когда я изменяю код конструктора, чтобы ссылаться на изображение из его нового местоположения, код компилируется и работает правильно, но теперь конструктор Windows Forms меняет мой код всякий раз, когда он генерирует код; он встраивает двоичный файл изображения в локальный файл ресурсов и ссылается на него оттуда.
// ResourceProducer is an external assembly containing resources
this.button1.Image = global::ResourceProducer.Properties.Resources.Exit32x32;
изменено конструктором Windows Forms на:
this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
Конструктор Windows Forms, похоже, понимает, что нужно извлекать ресурс из одной и той же сборки, но не из внешней. Есть ли способ заставить конструктор Windows Forms разрешить мне использовать ресурс из внешней сборки?