Visual Studio Нет доступных источников - PullRequest
4 голосов
/ 29 октября 2011

Я действительно в растерянности и пытаюсь найти решение этой проблемы в течение нескольких часов.Я потерян.Я получаю следующее исключение во время операции, которая работала в прошлый раз, когда я проверял.

'{DependencyProperty.UnsetValue}' is not a valid value for property 'Foreground'.

Это не приводит меня к месту возникновения ошибки.Я перехожу на страницу с надписью «Источник недоступен» и больше ничего.Я попытался определить местонахождение ошибки, разместив точки останова в разных местах, но, похоже, она не сработала в разных точках во время каждого прогона.InnerException - ноль.

Я видел этот вопрос , а также различные статьи от Google.Я не могу понять, что происходит, и я не знаю, как устранить неполадки отсюда.Выходные данные Visual Studio не дают более подробной информации, но я вставлю ее по запросу.Пожалуйста, любая помощь приветствуется.

Ответы [ 2 ]

6 голосов
/ 29 октября 2011

Я хочу быть, у вас есть пропавший ресурс. Если вы делаете что-то вроде:

<Window x:Name="window" x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApplication4"
        Title="MainWindow" Height="350" Width="525" >
    <Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Foreground" Value="{StaticResource NoSuchResourceKey}" />
    </Style>
    </Window.Resources>
    <StackPanel>
        <Button Content="Click Me" />
    </StackPanel>
</Window>

Тогда вы получите такое исключение. Мы даже можем использовать ComponentResourceKey для создания этого исключения:

<Style TargetType="Button">
    <Setter Property="Foreground" Value="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement}, ResourceId=NoSuchResourceKey}}" />
</Style>

Здесь есть несколько вещей, которые вызывают проблему. Обычно вы получаете сообщение об ошибке компилятора, говорящее о том, что ресурс не существует при использовании StaticResource. Например, в этом случае:

<Button Content="Click Me" Foreground="{StaticResource NoSuchResourceKey}" />

Если вместо этого мы сделали:

<Button Content="Click Me" Foreground="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement}, ResourceId=NoSuchResourceKey}}" />

Тогда вы получите другое исключение (XamlParseException), говорящее:

Укажите значение для 'System.Windows.StaticResourceExtension', вызвавшего исключение. ' Номер строки «6» и позиция строки «22».

С внутренним исключением:

Не удается найти ресурс с именем 'TargetType = System.Windows.FrameworkElement ID = NoSuchResourceKey'. Имена ресурсов чувствительны к регистру.

Что все приводит нас к реальной проблеме (отсутствующий ресурс). Причина, по которой первые два примера не дают нам полезного исключения, заключается в том, что мы не устанавливаем свойство Foreground. Мы устанавливаем свойство Value для объекта Setter. Поэтому, когда ресурс не найден, используется DependencyProperty.UnsetValue. Что совершенно верно для свойства Setter.Value.

Позже, когда Style применяется к Button, мы получаем исключение, потому что именно тогда DependencyProperty.UnsetValue фактически присваивается свойству Button.Foreground.

Чтобы исправить эту проблему, я бы по всему вашему решению выполнил поиск Property="Foreground" и нашел бы все экземпляры, которые используют ресурс, который не существует.

Я должен добавить, что вы не получите исключение при использовании DynamicResource, потому что в этом значении, переданном свойству Button.Foreground, есть «специальное значение» (которое позволяет отложить поиск). Это «специальное значение» не будет назначать данное свойство, если ресурс не найден.

1 голос
/ 29 октября 2011

Вы перестроили свой проект? Ваши файлы PDB могут не соответствовать вашим DLL, поэтому VS может не загружать их. Что касается самой ошибки, скорее всего, ошибка привязки к свойству Foreground.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...