4

我将 ReSharper 8.2.3 完整版与 Visual Studio Ultimate 2013 和 .NET 4.5 一起使用。

背景是我有一个带有大量项目的C# WPF解决方案。为了简化这里的描述,我有以下项目:

项目 1:具有 UI 资源(样式、字体等)的库,包括名为 ResourceLibrary.xaml 的资源字典。

项目 2:带有一些 WPF 用户控件/视图和 app.xaml 的主 exe。WPF 用户控件不直接引用项目 1 中的 ResourceLibrary.xaml。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”。请注意,项目 2 中的 XAML 文件并非如此,它也使用资源库中的资源。该解决方案构建良好。

由于性能原因,我想避免在每个 XAML 文件中包含资源库,但我确实希望 ReSharper 给我相关警告。这个问题有解决方法吗?

我知道我可以在 ReSharper 中关闭“找不到资源 XXX”警告,但这会阻止我检测到真正的资源问题。

4

1 回答 1

5

您可能已经解决了这个问题,但这是我用于自己项目的解决方案。

如果您在项目 3 中添加一个新的 WPF 用户控件,将其更改为 Application(以及在后面的代码中)并从那里添加您对资源库的引用,Resharper 就会停止抱怨。

有点 hack,但是代码永远不会执行,至少您不需要修改每个控制器。

<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>

于 2015-05-29T09:43:27.967 回答