【发布时间】: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