启动我的wpf应用程序并尝试显示特定控件我收到此异常:
" FileNotFoundException - 无法加载文件或程序集" Xceed.WPF.Toolkit.resources,version = 2.0.0.0,Culture = it-IT ...."
我知道这似乎已经讨论过一个问题,但我的问题更具体一点。
我的应用程序(Wolf.exe)适用于插件系统。插件系统从位于Extension应用程序文件夹内的外部dll加载插件类(此文件夹位于.exe的同一级别)。插件能够加载额外的资源,如xaml字典,并指定自定义样式以扩展基本组件。
其中一个插件/程序集(FSMExtension.dll)以这种方式加载额外的xaml资源:
FileStream oFileStream = new FileStream(filename, FileMode.Open);
if (oFileStream != null)
{
ResourceDictionary oResourceDictionary = (ResourceDictionary)XamlReader.Load(oFileStream);
if (oResourceDictionary != null)
{
Application.Current.Resources.MergedDictionaries.Add(oResourceDictionary);
}
}
oFileStream.Close();
FSMExtension.dll依赖于"扩展WPF工具包™社区版" (http://wpftoolkit.codeplex.com/documentation)因为它需要一个PropertyGrid组件。结果xaml有类似的方面:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:WolfLib.UI.Converters;assembly=WolfLib"
xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid;assembly=Xceed.Wpf.Toolkit">
<converters:BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" IsHidden="false" TriggerValue="false"></converters:BooleanToVisibilityConverter>
<Style x:Key="FSMBlockStyle" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<xctk:PropertyGrid Grid.Row="5" Grid.ColumnSpan="2" Margin="5 0 5 5" Visibility="{Binding ElementName=PropertyToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}"
ShowSummary="false"
IsCategorized="true"
ShowAdvancedOptions="false"
IsReadOnly="false"
ShowSortOptions="false"
ShowSearchBox="false"
ShowTitle="false"
AutoGenerateProperties="false"
MaxWidth="300">
<xctk:PropertyGrid.PropertyDefinitions>
<xctk:PropertyDefinition TargetProperties="Name,Type,MainController,Views,ControllerBehaviours,ControllerParams"/>
</xctk:PropertyGrid.PropertyDefinitions>
</xctk:PropertyGrid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当我将特定样式应用于我的控件时,我收到上述异常。如果我尝试在我的应用程序中直接使用PropertyGrid控件(在MainWindow.xaml上),则不会发生此异常。这个问题也很奇怪,因为我没有任何类型的.resources.dll文件。
我发现解决问题的唯一方法是为扩展WPF工具包™社区版&#34;指定默认文化程序集。并重建它。
此修复程序适用于我的机器配置,其中包含&#34; it-IT&#34;语言/文化。如果我在具有不同文化的不同机器(即en-US)中启动我的应用程序,则会再次抛出异常。
有没有特定的方法来处理这类问题?如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
我并不清楚Xceed是如何工作的,但是当使用多种文化时,必须对装配进行装饰以指示默认文化。否则.NET运行时会抱怨无法找到资源文件。对于每个消费程序集,它都在AssembyInfo.cs
:
在桌面应用中,使用NeutralResourcesLanguageAttribute属性 通知资源管理器应用程序的默认文化和 资源的位置。默认情况下,资源嵌入在 主应用程序集,您可以使用如下属性。
宣言看起来像这样......
[assembly: NeutralResourcesLanguage("en-GB")]
其中&#34; en-GB&#34;指定默认值。如果你找不到它,装配的装饰就像这样......
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MultiLanguage")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MultiLanguage")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en-GB")]
文档在http://msdn.microsoft.com/en-us/library/system.resources.neutralresourceslanguageattribute.aspx
此处有一个带源代码的WPF参考应用程序https://tcimultilanguage.codeplex.com/