Ресурс WPF не обнаруживается ReSharper во время разработки, но создается решение

Я использую ReSharper 8.2.3 Full Edition с Visual Studio Ultimate 2013 и .NET 4.5.

Предыстория заключается в том, что у меня есть решение C # WPF с большим количеством проектов. Чтобы упростить описание здесь, у меня есть следующие проекты:

Проект 1: библиотека с ресурсами пользовательского интерфейса (стили, шрифты и т. д.), включая словарь ресурсов с именем ResourceLibrary.xaml.

Проект 2: основной исполняемый файл с некоторыми пользовательскими элементами управления/представлениями WPF и файлом app.xaml. Пользовательские элементы управления WPF НЕ ссылаются напрямую на ResourceLibrary.xaml в проекте 1. IntelliSense работает нормально, а ReSharper НЕ генерирует никаких предупреждений (синие волнистые линии).

Проект 3: библиотека с некоторыми пользовательскими элементами управления/представлениями WPF. Все эти пользовательские элементы управления относятся к ResourceLibrary.xaml:

<UserControl.Resources>
    <ResourceDictionary Source="/<my_resource_namespace>;component/ResourceLibrary.xaml" />
</UserControl.Resources>

IntelliSense работает нормально, а ReSharper НЕ генерирует никаких предупреждений (синие волнистые линии).

Решение строится нормально, IntelliSense работает (находит статические ресурсы в ResourceLibrary.xaml), а ReSharper не выдает никаких предупреждений.

Однако если указанные выше строки удалить, IntelliSense не работает и ReSharper выдает предупреждение «Ресурс XXX не найден». Обратите внимание, что это НЕ относится к файлам XAML в проекте 2, который также использует ресурсы в библиотеке ресурсов. Решение строится нормально.

Я не хочу включать библиотеку ресурсов в каждый файл XAML из соображений производительности, но я хочу, чтобы ReSharper выдавал мне соответствующие предупреждения. Есть ли решение этой проблемы?

Я знаю, что могу отключить предупреждения «Ресурс XXX не найден» в ReSharper, но это помешает мне обнаружить реальные проблемы с ресурсами.


person Don Pedro    schedule 12.01.2015    source источник
comment
Вы можете добавить свой ResourceDictionary в MergedDictionary в App.xaml ресурсах, а не в каждом файле XAML.   -  person user2250152    schedule 12.01.2015
comment
Возможно, я вас неправильно понял, но обратите внимание, что проблема возникает в таких проектах, как проект 3, т.е. библиотеки (НЕ исполняемые файлы) = нет файла app.xaml. Вот почему файлы xaml в проекте 2 работают, но НЕ в проекте 3.   -  person Don Pedro    schedule 12.01.2015
comment
Кто знает ответ на это?   -  person Don Pedro    schedule 16.01.2015


Ответы (1)


Возможно, вы уже решили это, но это решение, которое я использовал для своего собственного проекта.

Если вы добавите новый пользовательский элемент управления WPF в Project 3, измените его на Application (и в коде позади) и добавите оттуда ссылку на библиотеку ресурсов, Resharper перестанет жаловаться.

Немного хака, но код никогда не выполняется, и, по крайней мере, вам не нужно модифицировать каждый контроллер.

<Application x:Class="Namespace.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Remove Resharper warning about "Resource ... is not found" and allow navigation/refactoring-->
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Namespace.Infrastructure;component/SystemStyles/Styles.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

person anderbakk    schedule 29.05.2015
comment
Немного поздно на вечеринку, но это работает отлично! У меня была такая же проблема в проекте Caliburn.Micro. Спасибо - person hcd; 05.03.2017
comment
То же верно и для Xamarin Forms (для Reshaper или Gorilla Player) - person François; 03.05.2018