【问题标题】:Missing WPF styles when using Nuget instead of Reference使用 Nuget 而不是 Reference 时缺少 WPF 样式
【发布时间】:2019-03-14 20:24:32
【问题描述】:

我已经从一个包含资源字典、自定义控件和各种帮助方法的 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 安装了它,这似乎只有在我使用动态资源直接引用样式时才有效。所有继承的样式似乎都已停止工作。

【问题讨论】:

  • 你是如何用资源字典打包你的 nuget 包的?你是如何调用资源字典的?您可能需要提供一些具体信息,否则,我们只是知道资源字典来自 nuget 对您不起作用,但我们无法知道您为什么/如何得到这个问题。一些重现步骤应该会更好。
  • 我已编辑帖子以包含更多详细信息和示例。
  • 感谢您的更新,我已经创建了一个测试演示,但无法重现此问题。我不确定我所做的是否与您相同,您可以检查我的测试样本是否与您的不同:1drv.ms/f/s!Ai1sp_yvodHfhVkZNrNIF2Pp1Kp5。如果和你的不一样,可以的话,你可以分享一个测试样本给我,我去查一下。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2013-09-20
    相关资源
    最近更新 更多