У меня проблемы с локализованными ресурсами для подпроектов.
Основной проект (называемый Z) использует подпроект (называемый ProjectsModule), у которого есть собственные ресурсы. Подпроект имеет два файла ресурсов:
Strings.resx
Strings.pl-PL.resx
Приложение работает в режиме отладки с Poli sh в качестве текущей культуры пользовательского интерфейса.
Я получаю следующее исключение:
System.Windows.Markup.XamlParseException: 'Operacja podawania wartości elementu
„System.Windows.Markup.StaticExtension” wywołała wyjątek., numer wiersza 24, pozycja 52.'
ArgumentException: Obiektu StaticExtension
„ProjectsModule.Resources.Strings.Projects_Config_Projects” nie można rozpoznać jako wyliczenia, pola
statycznego ani właściwości statycznej.
В переводе говорится:
"ProjectsModule.Resources.Strings.Projects_Config_Projects" cannot be recognized as enum, static field
or static property.
Это происходит, когда загружается XAML окна. Итак, я проверил и изменил конструктор окна:
public ConfigurationWindow(ConfigurationWindowViewModel viewModel)
{
// *** DEBUG ***
System.Diagnostics.Debug.WriteLine(ProjectsModule.Resources.Strings.Projects_Config_Projects);
// *** END DEBUG ***
InitializeComponent();
this.viewModel = viewModel;
viewModel.Access = this;
this.DataContext = viewModel;
}
И, как ни странно, я получаю следующий результат:
Katalogi projektów
'Z.exe' (CLR v4.0.30319: Z.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xaml.resources\v4.0_4.0.0.0_pl_b77a5c561934e089\System.Xaml.resources.dll'. Module was built without symbols.
Exception thrown: 'System.ArgumentException' in System.Xaml.dll
Exception thrown: 'System.Xaml.XamlObjectWriterException' in System.Xaml.dll
Exception thrown: 'System.Windows.Markup.XamlParseException' in PresentationFramework.dll
Operacja podawania wartości elementu „System.Windows.Markup.StaticExtension” wywołała wyjątek., numer wiersza 24, pozycja 52.
"Katalogi projektów" - это именно тот ресурс, который я ищу - значит явно достижимо. Однако по какой-то причине он недоступен для анализатора XAML (вы можете увидеть исключение, упомянутое ранее, сразу после правильно разрешенного ресурса).
Что я делаю не так? Почему ресурс, который явно доступен (и, более того, прочитан из правильно переведенной вспомогательной сборки), недоступен синтаксическому анализатору XAML?
Изменить: В ответ на комментарии
Использование ресурсов:
<Window ...
xmlns:properties="clr-namespace:ProjectsModule.Resources"
</Window>
...
<TextBlock DockPanel.Dock="Top" Margin="3" Style="{StaticResource Header}"
Text="{x:Static properties:Strings.Projects_Config_Projects}"></TextBlock>
Культура основана на культуре операционной системы. Значит, устанавливается автоматически.