После некоторого изучения проблемы я решил обходной путь: делайте наследование не для самих файлов ресурсов, а для классов, которым требуется доступ к "родительским" ресурсам.
Вы тольконеобходимо иметь базовый класс, чей проект включает в себя «основной» файл ресурсов, и установить для свойства CustomTool этого файла ресурсов значение PublicResXFileCodeGenerator (часть «Public» важна, поскольку она создает класс public
, так какв отличие от internal
).Одно ограничение заключается в том, что PublicResXFileCodeGenerator доступен только начиная с VS2008 (в противном случае этот CodeProject article может быть полезен).
Затем в классах, которым требуется доступ к "основным" ресурсам, просто наследуйте отбазовый класс и доступ к ресурсам следующим образом:
public class ChildClass : BaseClass
{
string test = BaseClass.BaseResourceFile.TestString; // a common resource
string localResource = ResourceFile.OtherString; // a local resource
}
Один недостаток этого решения заключается в том, что вам необходимо явно ссылаться на BaseResourceFile для доступа к определенным там ресурсам;нет возврата к родительскому классу, как это было бы, если бы наследование осуществлялось непосредственно между классами Resource.
А для потомков я отвечу на свои вопросы:
Когда ResXFileCodeGenerator генерирует / восстанавливает класс конструктора?
Всякий раз, когда ресурс добавляется / удаляется / изменяется.
Есть лиспособ выключить это автоматическое поколение?
Нет.И вообще, инструмент «генератор кода» без автогенерации был бы довольно бесполезен, не правда ли?
Придется ли нам отказаться от преимуществ ResXFileCodeGenerator и реализоватьнаша собственная обработка ResourceManager?
Нет, см. ответ выше.
Мы также рассматривали реализацию решения с использованием «связанных» файлов (из «Добавить существующее»элемент ", используя опцию" Добавить как ссылку "), где один родительский файл ресурсов будет связан со всеми нашими сборками, но поскольку наши сборки уже наследуются от базового класса, казалось, что гораздо лучше пойти по пути наследования.
Мне не очень комфортно принимать мой собственный ответ, поэтому, если кто-то придумает лучшее решение или улучшения моего решения, я с радостью приму это.То есть, если кому-то все равно.