我正在尝试构建我办公室的其他工程师可以使用的样式和控件组件。例如,我有一个派生自 WPFToolKit 的 DoubleUpDown 控件的类型 (MSpinner)。我也有一套用于这个 MSpinner 控件的样式。
在测试可执行文件中,我使用此处详述的技术来访问资源,我也遵循该技术来创建资源程序集。
我还在资源库上使用来自 NuGet 的 Costura.Fody 程序集嵌入工具,以便我可以将 WPFToolKit 程序集嵌入到我的资源库程序集中。
我的资源库程序集构建得很好。然后,我继续使用我的资源库程序集作为新的测试 WPF 可执行文件中的参考。
我的用法如下。
<Window x:Class="UIPart.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.galasoft.ch/ignore"
xmlns:controls="clr-namespace:MyResources.Controls;assembly=MyResources"
mc:Ignorable="d ignore"
Height="300"
Width="300"
Title="MVVM Light Application"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<controls:MSpinner/>
</Grid>
</Window>
但是,当我编译可执行文件时,出现以下错误。
严重性代码描述项目文件行抑制状态错误未知的构建错误,'无法解析对程序集'Xceed.Wpf.Toolkit,版本= 2.7.0.0,文化=中性,PublicKeyToken = 3e4669d2f30244f4'的依赖,因为它尚未预加载。使用 ReflectionOnly API 时,必须通过 ReflectionOnlyAssemblyResolve 事件预加载或按需加载依赖程序集。第 24 行位置 10。UIPart C:\Users\heyyouthere\Documents\Visual Studio 2015\Projects\ResourceDictionaryExample\UIPart\MainWindow.xaml 24
我在这里的第一个想法是 Costura.Fody 没有做好它的工作并且没有嵌入 WPF.ToolKit 程序集,但实际上,根据生成的资源库程序集的字节大小,当 Costura 时确实更大.Fody 的嵌入被执行。
然后我想继续并在可执行文件中引用 WPFToolKit 本身,这听起来有点多余,当然,但为什么不呢。所以我从 NuGet 安装了它,结果错误消失了,一切正常。
但是,这样做对我来说不是解决方案。所有资源和这些资源的所有依赖项都需要合并到我的资源库中,包括 WPFToolkit,我认为这是成功的。
我的问题是为什么大会没有解决?是否有一些签名不匹配?是否在磁盘上明确寻找 Xceed.Wpf.Toolkit.dll 文件?多亏了 Fody,Xceed.Wpf.Toolkit.dll 中定义的类型不是嵌入到我的资源库中了吗?