Проблемы основной сборки и спутниковой сборки при получении ресурсов XAML и RESX в C # .Net

В локализованной программе, содержащей файл XAML, не зависящий от культуры, некоторые значки и локализованные строки, как организовать эти различные типы ресурсов, чтобы их все можно было найти? Независимо от того, какое расположение я пробую, я обнаруживаю, что один из моих типов ресурсов недоступен.

Моя проблема:

  • Файл MainWindow.xaml всегда встраивается в вспомогательную сборку en-US. Если для UltimateResourceFallbackLocation установлено значение MainAssembly, он никогда не найдет BAML окна, и я получаю исключение в вызове InitializeComponent (). Поэтому я чувствую себя вынужденным установить UltimateResourceFallbackLocation на «Satellite».

  • Ресурсы значка, не зависящие от культуры, содержащиеся в файле Resources.resx, всегда встраиваются в основную сборку EXE и не могут быть найдены, если UltimateResourceFallbackLocation имеет значение Satellite. Это может показаться полностью несовместимым с требованиями файла MainWindow.xaml.

  • Если я полностью удалю UICulture и NeutralResourcesLanguage, что приведет к встраиванию данных XAML и RESX в MainAssembly, то мои строки, зависящие от языка и региональных параметров, не будут работать.

Возникает вопрос: что я делаю не так? Как мне построить проект, чтобы все эти три типа ресурсов были доступны?

Правка (рабочее решение, но оно кажется неправильным):

Мне удалось встроить в сборку Satellite, Resources.resx, свой нейтральный по культуре файл RESX, полностью продублировав его, переименовав дубликат в Resources.en-US. .resx и установите для Resources.resx значение Build Action: None (поэтому Resources.resx используется только для создания файла Resources.Designer.cs, но больше не вставляет данные в сборку Main EXE).

Теперь программа работает во всех трех случаях (локализованные строки, нелокализованные данные из resx и нелокализованные данные из XAML), поскольку все мои нейтральные по культуре ресурсы теперь находятся в сборке en-US, но дублируют ресурсы. resx, чтобы добиться этого, кажется довольно глупым.

Это глупо? Есть ли более разумный способ сделать это?

6
задан Matt Gallagher 10 December 2011 в 16:36
поделиться