我正在使用.Net 4.6.1在Visual Studio 2017中
我(在项目A中)建立了一个WPF样式,控件,转换器等的库,供在构建应用程序时使用。这个想法是,如果公司的品牌发生变化,我们可以重新发布该库,所有引用该库的应用程序都将被重新命名。
项目A没有错误或警告,并且可以正确构建以制作.dll文件。
但是,当我在项目B中引用.DLL时,引用某些.DLL组件的xaml会永远显示Loading designer... You can continue working while the designer is loading in the background
消息。当我尝试启动Project B时,它告诉我它处于中断模式,带有System.StackOverflowException
就是这样。
我尝试在app.xaml文件中添加和删除行:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WPFLibrary;component/Styles/Colours.xaml"/>
<ResourceDictionary Source="pack://application:,,,/WPFLibrary;component/Styles/Brushes.xaml"/>
<ResourceDictionary Source="pack://application:,,,/WPFLibrary;component/Styles/Text.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
这样做给了我一个提示,也许是因为只有一些引用(或者引用太多?)会导致设计器失败,但是我很难过一段时间来寻找正在发生的事情。 / p>
考虑到问题A所在的项目A是否正确构建,您是否知道如何调试该问题?例如,在设计时可能发现问题的任何技巧或窍门或其他工具?
或者,也欢迎任何有关如何检查项目B中所有内容的建议。我检查了所有引用,名称空间和资源字典,并确信语法正确,但是也许我可能错过了一个陷阱?
答案 0 :(得分:0)
因此,事实证明,这是您在周末离开的那些烦人的问题之一,当您返回时,它已经改变了外观。我回来了,再也找不到堆栈溢出错误。
报告的错误是项目A中的UserControl无法找到同一项目中内置的资源之一。我可以通过将合并字典中的引用从标准格式更改为Pack URI来解决此问题(仅当在项目本身中查看时,本地路径引用才起作用-它们在DLL中失败)。从这个:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/Buttons.xaml"/>
<ResourceDictionary Source="/Styles/Gradients.xaml"/>
<ResourceDictionary Source="/Styles/Text.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
对此:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WPFLibrary;component/Styles/Buttons.xaml"/>
<ResourceDictionary Source="pack://application:,,,/WPFLibrary;component/Styles/Gradients.xaml"/>
<ResourceDictionary Source="pack://application:,,,/WPFLibrary;component/Styles/Text.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
据此我了解到-本地引用仅在资源词典之间的DLL中本地工作;如果您希望使用DLL中的UserControl,则必须使用包格式。将来,我将在不引起语法错误的所有地方使用Pack URI!