У меня есть следующее, очень легкое для репродуцирования проблемы: я создаю xaml приложение, которое использует ресурсы из другого файла. Способ пойти состоит в том, чтобы создать MergedDictionaries-тег для слияния локальных и глобальных ресурсов, как это:
<Window>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="path.to.xaml.file"/>
<ResourceDictionary>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
....
</Window>
Этот маленький кусочек кода откажет при выполнении его:
Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border'
Если мы удалим MergedDictionaries-тег, то код будет работать как ожидалось:
<Window>
<Window.Resources>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</Window.Resources>
</Window>
Я не понимаю, почему это выдает исключение, когда мы используем Объединенные Ресурсы. От курса фиксация достаточно легка на данный момент (переместите ресурсы в более низкий уровень). Было бы хорошо знать, является ли это 'нормальным' поведением...
Розетки должны быть довольно простыми. Какие данные нужно отправить? Если это просто простые строки/другие примитивные типы, вы можете просто придумать базовый xml-макет и отправить его.
-121--4180482-В нашем коде для обмена данными 1.1 < -- > 3.5 используются как дистанционные, так и веб-службы. Мы обнаружили, что веб-службы легче всего переносить с 1.1 до 3.5.
-121--4180483-Если ваши ресурсы не находятся в отдельном файле, они не должны входить в состав объединенных словарей. Переместите их наружу так:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="path.to.xaml.file"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</ResourceDictionary>
</Window.Resources>
Это означает, что сообщение об ошибке немного вводит в заблуждение и может быть результатом ошибки в компиляторе XAML.