XAML 无法访问本地化资源

Spo*_*ook 1 c# wpf resources localization

我在子项目的本地化资源方面遇到问题。

\n

主项目(称为 Z)使用子项目(称为 ProjectsModule),子项目有自己的资源。子项目有两个资源文件:

\n
Strings.resx\nStrings.pl-PL.resx\n
Run Code Online (Sandbox Code Playgroud)\n

应用程序正在调试模式下运行,并以波兰语作为当前 UI 区域性。

\n

我遇到以下异常:

\n
System.Windows.Markup.XamlParseException: \'Operacja podawania warto\xc5\x9bci elementu \n\xe2\x80\x9eSystem.Windows.Markup.StaticExtension\xe2\x80\x9d wywo\xc5\x82a\xc5\x82a wyj\xc4\x85tek., numer wiersza 24, pozycja 52.\'\nArgumentException: Obiektu StaticExtension \n\xe2\x80\x9eProjectsModule.Resources.Strings.Projects_Config_Projects\xe2\x80\x9d nie mo\xc5\xbcna rozpozna\xc4\x87 jako wyliczenia, pola \nstatycznego ani w\xc5\x82a\xc5\x9bciwo\xc5\x9bci statycznej.\n
Run Code Online (Sandbox Code Playgroud)\n

翻译过来,它说:

\n
"ProjectsModule.Resources.Strings.Projects_Config_Projects" cannot be recognized as enum, static field\nor static property.\n
Run Code Online (Sandbox Code Playgroud)\n

当加载窗口的 XAML 时,就会发生这种情况。所以我做了一个测试并修改了窗口的构造函数:

\n
Strings.resx\nStrings.pl-PL.resx\n
Run Code Online (Sandbox Code Playgroud)\n

奇怪的是我得到以下输出:

\n
Katalogi projekt\xc3\xb3w\n\'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.\nException thrown: \'System.ArgumentException\' in System.Xaml.dll\nException thrown: \'System.Xaml.XamlObjectWriterException\' in System.Xaml.dll\nException thrown: \'System.Windows.Markup.XamlParseException\' in PresentationFramework.dll\nOperacja podawania warto\xc5\x9bci elementu \xe2\x80\x9eSystem.Windows.Markup.StaticExtension\xe2\x80\x9d wywo\xc5\x82a\xc5\x82a wyj\xc4\x85tek., numer wiersza 24, pozycja 52.\n
Run Code Online (Sandbox Code Playgroud)\n

“Katalogi projekt\xc3\xb3w”正是我正在寻找的资源 - 所以它显然是可以访问的。但是,由于某种原因,XAML 解析器无法访问它(您可以在正确解析资源后看到前面提到的异常)。

\n

我究竟做错了什么?为什么 XAML 解析器无法使用显然可用的资源(而且,从正确翻译的附属程序集读取)?

\n
\n

编辑:回应评论

\n

资源使用情况:

\n
System.Windows.Markup.XamlParseException: \'Operacja podawania warto\xc5\x9bci elementu \n\xe2\x80\x9eSystem.Windows.Markup.StaticExtension\xe2\x80\x9d wywo\xc5\x82a\xc5\x82a wyj\xc4\x85tek., numer wiersza 24, pozycja 52.\'\nArgumentException: Obiektu StaticExtension \n\xe2\x80\x9eProjectsModule.Resources.Strings.Projects_Config_Projects\xe2\x80\x9d nie mo\xc5\xbcna rozpozna\xc4\x87 jako wyliczenia, pola \nstatycznego ani w\xc5\x82a\xc5\x9bciwo\xc5\x9bci statycznej.\n
Run Code Online (Sandbox Code Playgroud)\n

文化是基于操作系统文化的。所以它是自动设置的。

\n

tha*_*guy 6

StaticExtension 值无法解析为枚举、静态字段或静态属性。

您的.resx文件必须具有Public访问修饰符,否则您将XamlParseException在运行时获得访问修饰符,因为 XAML 解析器无法访问资源。这是Internal默认情况,因此无法从另一个程序集访问资源。要更改访问修饰符,请转到资源编辑器并在标题下拉菜单中进行更改。

在此输入图像描述

或者,将CustomTool资源文件属性中的 更改为PublicResXFileCodeGenerator.

在此输入图像描述