XAML 无法访问本地化资源
XAML cannot reach localized resources
我在处理子项目的本地化资源时遇到问题。
主项目(称为Z)使用子项目(称为ProjectsModule),它有自己的资源。子项目有两个资源文件:
Strings.resx
Strings.pl-PL.resx
应用程序 运行 处于调试模式,波兰语为当前 UI 文化。
我遇到以下异常:
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.
加载 window 的 XAML 时会发生这种情况。所以我做了一个测试并修改了window的构造函数:
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>
文化基于操作系统文化。所以它是自动设置的。
StaticExtension value cannot be resolved to an enumeration, static field, or static property.
您的 .resx
文件必须具有 Public
访问修饰符,否则您将在运行时获得 XamlParseException
,因为 XAML 解析器无法访问资源。默认情况下为 Internal
,因此无法从另一个程序集访问资源。要更改访问修饰符,请转到资源编辑器并在 header drop-down 菜单中进行更改。
或者,将资源文件属性中的 CustomTool
更改为 PublicResXFileCodeGenerator
。
我在处理子项目的本地化资源时遇到问题。
主项目(称为Z)使用子项目(称为ProjectsModule),它有自己的资源。子项目有两个资源文件:
Strings.resx
Strings.pl-PL.resx
应用程序 运行 处于调试模式,波兰语为当前 UI 文化。
我遇到以下异常:
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.
加载 window 的 XAML 时会发生这种情况。所以我做了一个测试并修改了window的构造函数:
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>
文化基于操作系统文化。所以它是自动设置的。
StaticExtension value cannot be resolved to an enumeration, static field, or static property.
您的 .resx
文件必须具有 Public
访问修饰符,否则您将在运行时获得 XamlParseException
,因为 XAML 解析器无法访问资源。默认情况下为 Internal
,因此无法从另一个程序集访问资源。要更改访问修饰符,请转到资源编辑器并在 header drop-down 菜单中进行更改。
或者,将资源文件属性中的 CustomTool
更改为 PublicResXFileCodeGenerator
。