Поделиться через


Неправильное использование DynamicResource приводит к сбою приложения

Начиная с .NET 10 (предварительная версия 4), приложения, неправильно использующие DynamicResource, теперь завершают работу с ошибкой во время выполнения.

Представленная версия

.NET 10 (предварительная версия 4)

Предыдущее поведение

Приложения, которые неправильно инициализированы DynamicResource , будут работать без сбоя. Значения вернутся к значениям по умолчанию, и в выходных данных появится InvalidOperationException.

Новое поведение

Теперь приложения завершаются сбоем с ошибкой, похожей на следующую:

System.Windows.Markup.XamlParseException: Set property 'System.Windows.ResourceDictionary.Source' threw an exception.

Это происходит, когда используется DynamicResourceнеправильный тип ресурса. Например, приведенный ниже фрагмент кода приводит к сбою, так как SolidColorBrush используется вместо System.Windows.Media.Color:

<SolidColorBrush x:Key="RedColorBrush" Color="#FFFF0000" />
<SolidColorBrush x:Key="ResourceName" Color="{DynamicResource RedColorBrush}" />

Тип разрушающего изменения

Это и изменение несовместимости с исходным кодом, и изменение поведения.

Причина изменения

Это изменение улучшает производительность при использовании DynamicResource. Оптимизация гарантирует, что неправильная инициализация ресурсов немедленно обнаруживается, предотвращая непреднамеренное поведение.

Чтобы избежать сбоев, убедитесь, что с DynamicResource используются правильные типы ресурсов. Например, следующий код устраняет проблему с помощью System.Windows.Media.Color вместо SolidColorBrush.

<Color x:Key="RedColor">#FFFF0000</Color>
<SolidColorBrush x:Key="ResourceName" Color="{DynamicResource RedColor}" />

Затронутые API

Нет.