使用Nuget而不是Reference时缺少WPF样式

时间:2018-03-07 15:58:01

标签: c# xaml visual-studio-2015 nuget

我已经从ui解决方案构建并上传了一个nuget包,其中包含资源字典,自定义控件和各种帮助方法。然后我从我的主解决方案中删除了外部dll并引用它,并添加了nuget包作为依赖项。

自定义控件和帮助器方法可以正常工作。然而,所有样式都缺失,好像它无法找到资源字典。但是,如果我直接使用动态资源引用样式,它们就可以正常工作。

如果我重置我的主解决方案分支,只需用nuget包中的dll替换直接引用dll就可以了。如果我制作第三个解决方案并将其与动态资源一起使用,它也可以正常工作。

我目前最好的猜测是,它不再能够从字典中找到继承的样式,但我不明白使用nuget包会有什么不同。

编辑:

所以在包nuget dll中有一堆样式化的xaml文件。它们被合并为一个大型资源字典,如下所示:

<ResourceDictionary.MergedDictionaries>
  <ResourceDictionary Source="A.xaml" />
  <ResourceDictionary Source="B.xaml" />
  <ResourceDictionary Source="C.xaml" />
<ResourceDictionary.MergedDictionaries>

该资源位于名为Styles的文件夹中,如下所示:

Solution
  - Project
    - Styles
      - Styles.xaml

在nuget中,我在文件部分使用这些行打包了输出版本DLL和所有本地化dll:

<file src="bin\Release\**\UISolution.dll" target="lib\net40" />
<file src="bin\Release\**\System.Windows.Interactivity.resources.dll" target="lib\net40" />

所有依赖项,如Prism和Microsoft.Bcl,并包含在.NETFramework4.0组下。

在我使用直接dll引用之前,我的主要解决方案内部有一个资源字典,如下所示:

<ResourceDictionary.MergedDictionaries>
  <ResourceDictionary Source="D.xaml" />
  <ResourceDictionary Source="E.xaml" />
  <ResourceDictionary Source="/UISolution;component/Styles/Styles.xaml" />
<ResourceDictionary.MergedDictionaries>

MainWindow.xaml中还有这个,我认为是使继承的样式与直接dll引用一起工作:

Application.Current?.Resources.MergedDictionaries.Add(
    new ResourceDictionary
    {
        Source = new Uri("/Styles/Styles.xaml", UriKind.Relative)
    });

哪个工作正常。但是现在我已经删除了直接dll引用并通过nuget安装它,这似乎只有在我使用动态资源直接引用样式时才能工作。所有继承的样式似乎都停止了工作。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。问题是对xaml文件的引用将无法解析,因为这些文件不属于软件包。您需要将xaml文件的属性设置为“如果较新则复制”,然后它们将成为构建的一部分并被拉到nuget包中。完成此操作后,将可以使用以前使用的引用方法“ /UISolution;component/Styles/Styles.xaml”。