背景
我们在内部使用 Nuget包作为在我们拥有的解决方案和项目的动物园中共享服务,库和资源的一种方式。
然而,对于 WPF ,我们还有自定义字体包,样式(以及其他 WPF 资源),我们希望与消费应用程序合并。
期望的结果
让我们将字体作为示例(但这对所有基于 Xaml 的资源都是通用的)。我们有几个矢量字体的自定义包,其中样式与它们相关联。添加 Nuget Package 时,让样式以某种方式进入全局(而不是向每个页面添加MergedDictionary
引用或添加一行到Application.Resouces
)即
<ResourceDictionary.MergedDictionaries>
我已经在Asp.net(使用app_startup)以及正在使用post build事件(看起来有点不稳定)的人身上看到过这方面的解决方案。
潜在解决方案
我一直在考虑的解决方案是在我们的 Nuget Libraries 中创建一个简单的Interface / Class,Tag WPF 全局资源,并使用反射和 Dependency Walker 到prob 程序集查找所述接口/类。这又将它们添加到代码中的Application.Resources
,即
...
ResourceDictionary myResourceDictionary = new ResourceDictionary();
...
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
显然,我们仍然需要以某种方式对每个应用程序启用此功能,但它可以解决必须追踪Nuget
资源并手动将它们添加到每个页面 Xaml 或{的问题{1}}。
我的问题
有没有办法解决开箱即用的问题?我可以使用 Nuget 和 WPF 的一些管道可以实现这一点,我不知道吗?