Как заставить конструктор Windows Forms использовать ресурсы из внешней сборки

У меня есть некоторые ресурсы (в данном случае изображения) в файле ресурсов, которые я использую для элементов управления в моем проекте Windows Forms. Диалоговое окно выбора ресурса Visual Studio не очень хорошо поддерживает выбор изображений из файлов ресурсов, если они не находятся в определенных местах, но вы можете редактировать файл конструктора напрямую, и это прекрасно работает; приложение компилируется и работает правильно, и Windows Forms Designer достаточно умен, чтобы не испортить мой отредактированный код.

// in an assembly named ResourceConsumer
this.button1.Image = global::ResourceConsumer.Properties.Resources.Close32x32;

Теперь я хочу переместить эти ресурсы во внешнюю сборку, чтобы они могли использоваться несколькими приложениями. Я могу настроить сборку так, чтобы она без проблем открывала доступ к ее ресурсам (если я использую Visual Studio 2008 или более позднюю версию), и это прекрасно работает. Когда я изменяю код конструктора для ссылки на изображение из его нового местоположения, код компилируется и работает правильно, но теперь Windows Forms Designer меняет мой код всякий раз, когда он генерирует код; он встраивает двоичный файл изображения в файл локальных ресурсов и ссылается на него оттуда.

// 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 позволил мне использовать ресурс из внешней сборки?

8
задан Kevin Kibler 1 September 2010 в 15:25
поделиться