查找资源字典时出现设计时错误 - 项目之间不一致

2024-01-09

TLDR;

新引用外部的屏幕ResourceDictionary在运行时可以正确地以 VS2015 样式编写文件,但在设计时则不然。是什么赋予了?


在工作中,我们有一个 WinForms 产品,其中包含manyWinForms 屏幕上有一位开发人员主动添加了新的屏幕,还有一些 WPF 屏幕上有我添加了新的屏幕。注意到现有 WPF 屏幕中有很多重复的代码/样式,我创建了一个项目来容纳它 - 供所有现有/未来的 WPF 屏幕引用。

Project:Wpf助手

  • 平台目标:任何CPU
  • 目标框架:.NET Framework 4.6
  • WpfHelper.dll部署到...\Trunk\Project\Externals
  • ...\Trunk\Utilities\WpfHelper\WpfHelper\Resources\GlobalResources.xaml
    • 构建操作:页面
    • 包含通用样式的 ResourceDictionary

我已经参考过...\Trunk\Project\Externals\WpfHelper.dll在六个项目中,将以下代码添加到每个资源文件中:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/WpfHelper;Component/Resources/GlobalResources.xaml" />
</ResourceDictionary.MergedDictionaries>

所有屏幕均位于...\Trunk\Project\Plugins.

╔══════════╦═════════════════╦═════════════════╦══════════════════╦════════════════════════════════════════════════╗
║          ║ Resource Works? ║ Platform Target ║ Target Framework ║ Reference File Path                            ║
╠══════════╬═════════════════╬═════════════════╬══════════════════╬════════════════════════════════════════════════╣
║ Project1 ║ Succeeded       ║ Any CPU         ║ .NET 4.6         ║ ...\Project1\Project1\Resources\Resources.xaml ║
║ Project2 ║ Succeeded       ║ x86             ║ .NET 4.6         ║ ...\Project2\Project2\Resources\Resources.xaml ║
║ Project3 ║ Succeeded       ║ Any CPU         ║ .NET 4.6         ║ ...\Project3\Project3\Resources\Resources.xaml ║
║ Project4 ║ Failed          ║ x86             ║ .NET 4.6         ║ ...\Project4\Project4\Resources\Resources.xaml ║
║ Project5 ║ Failed          ║ x86             ║ .NET 4.6         ║ ...\Project5\Project5\Resources\Resources.xaml ║
║ Project6 ║ Failed          ║ Any CPU         ║ .NET 4.6         ║ ...\Project6\Project6\Resources\Resources.xaml ║
╚══════════╩═════════════════╩═════════════════╩══════════════════╩════════════════════════════════════════════════╝

近期变动

就在最近,我将 Visual Studios 2013 升级到 2015。大约在同一时间,另一个屏幕开发人员将所有现有屏幕项目的目标框架从 .NET Framework 3.5/4.0 升级到 .NET Framework 4.6。

成功项目

  • 我参考了WpfHelper.dll在...之前近期变动.
  • 在设计时和运行时正确应用样式。

失败的项目

  • 我参考了WpfHelper.dll之后近期变动.
  • 仅在运行时正确应用样式。
  • During Design-time, the error is thrown:

    查找资源字典“pack://application,/WpfHelper;component/Resources/GlobalResources.xaml”时发生错误。

  • Where the local Resources.xaml are used, the subsequent error is thrown:

    值不能为空。 参数名称:项目

我尝试过的:

阅读大量文章和问答后:

  • 设计时 WPF XAML 资源字典 http://www.oliver-lohmann.me/design-time-wpf-xaml-resource-dictionaries/
  • 如何在 WPF 中设计时加载 ResourceDictionary http://www.wpfsharp.com/2012/02/02/how-to-load-a-resourcedictionary-at-design-time-in-wpf/
  • 在单独的程序集中查找资源字典时出错 https://stackoverflow.com/questions/30127258/error-finding-resource-dictionary-in-separate-assembly
  • 在 .NET 4.0 中加载合并资源字典时出现问题 http://www.wpftutorial.net/MergedDictionaryPerformance.html
  • Windows Presentation Foundation 中的打包 URI https://msdn.microsoft.com/en-us/library/aa970069(v=vs.90).aspx
  • VS2013:查找资源字典时出错 https://stackoverflow.com/questions/19779776/vs2013-an-error-occurred-while-finding-the-resource-dictionary
  • 查找资源字典时出错 https://stackoverflow.com/questions/14392782/an-error-occurred-while-finding-the-resource-dictionary
  • 在另一个程序集中查找合并的资源字典时出错 https://stackoverflow.com/questions/6268979/error-finding-merged-resource-dictionary-in-another-assembly
  • 引用包含合并字典的资源字典时出现问题 https://stackoverflow.com/questions/1229395/trouble-referencing-a-resource-dictionary-that-contains-a-merged-dictionary
  • WPF VS2013:查找资源字典时发生错误 https://stackoverflow.com/questions/25721324/wpf-vs2013-an-error-occurred-while-finding-the-resource-dictionary
  • 应用程序运行正常,但在设计时出现“错误”:“命名空间中不存在”和“查找资源字典时发生错误” https://stackoverflow.com/questions/29150253/app-runs-normally-but-has-errors-during-design-time-does-not-exist-in-namesp
  • 作为链接文件的资源字典 https://stackoverflow.com/questions/2426753/resource-dictionary-as-linked-file
  • Visual Studio 2015 XAML 资源字典错误 https://stackoverflow.com/questions/31570132/visual-studio-2015-xaml-resource-dictionary-error

我尝试了以下所有方法均无效:

  • 将项目平台目标更改为“任何 CPU”
  • 将项目目标框架从 .NET Framework 4.6 更改为/更改为 .NET Framework 4.6
  • 确保所有 Resource.xaml 文件具有相同的构建操作(页面)等。
  • 检查了每个项目的AssemblyInfo.cs文件。失败的项目包括(我删除了)以下内容:

    [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
    
  • 手动清除 AppsData、清理和重建项目中的临时文件夹。

  • 重新开放项目。
  • 重新启动。
  • 右键复制WpfHelper.dll来自工作项目的参考并粘贴到失败项目的参考中。
  • 添加了WpfHelper.Resources.GlobalResources.xaml作为失败项目的链接文件。
  • 纠缠着每一个同事。
  • 添加了子词典的完整包 URIGlobalResources.xaml.
  • 杀了设计师 https://visualstudiogallery.msdn.microsoft.com/b7009e69-5e84-4221-bce2-5f0240a70464并重建了该项目。

我没有想法,迷失在研究中。我有模板化的 https://stackoverflow.com/a/11081517/3773066工作解决方案之一,并将其​​用于创建新屏幕 - 创建在设计时成功显示的新屏幕。这是关于这些预先存在的屏幕的事情。如何让失败的项目在设计时正确显示样式资源?


我已经找到了解决这个问题的方法,只需付出很少的努力即可实现。

首先为资源字典添加一个代码隐藏文件 GlobalResources.xaml.cs:

namespace YourNamespaceHere
{
    partial class GlobalResources : ResourceDictionary
    {
        public GlobalResources()
        {
            InitializeComponent();
        }
    }
}

然后将 x:Class 属性设置为 GlobalResources.xaml 中的 ResourceDictionary 标记:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="YourNamespaceHere.GlobalResources">

您现在可以像这样创建资源字典的实例:

new YourNamespaceHere.GlobalResources()

在使用资源字典的 WPF 用户控件中,将以下内容添加到 UserControl1.xaml.cs 的构造函数中:

public UserControl1()
{
    if (DesignerProperties.GetIsInDesignMode(this))
        this.Resources.MergedDictionaries.Add(new YourNamespaceHere.GlobalResources());

    InitializeComponent();
}

现在,使用 UserControl1 的控件的 WinForms 设计器将不再抱怨找不到包含资源字典的 dll。使用的资源也将显示在设计器中。

为了确保 WPF 设计器将显示 UserControl1 中使用的资源字典中的内容,您仍然需要在 UserControl1.xaml 中添加以下内容:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MyDll;component/GlobalResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

MyDll 是包含资源字典的程序集的名称。在此示例中,GlobalResources.xaml 和 GlobalResources.xaml.cs 应放置在程序集的根级别(而不是文件夹中)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找资源字典时出现设计时错误 - 项目之间不一致 的相关文章

随机推荐

  • ionic-item 颜色和 href 不起作用

    我开始了一个基于侧菜单模板的离子项目 我试图更改侧面菜单中每个元素的背景颜色 我希望每个项目都有不同的颜色 我尝试添加离子颜色类
  • 重塑数据(更快的方法)

    我发现了一张频率表 今天计数 我必须扩展到原始值的数据框架 我能够做到这一点 但想知道是否有更快的方法使用 reshape 包 r data table 原来的表是这样的 i1 i2 i3 i4 m f 1 0 0 0 0 22 29 2
  • 从字符串中删除所有非 utf-8 符号

    我有大量的文件和解析器 我要做的就是去掉所有非 utf 8 符号并将数据放入 mongodb 中 目前我有这样的代码 with open fname r as fp for line in fp line line strip line l
  • Typeorm子查询添加选择

    我是新使用的typeorm这是我第二次感到困惑typeorm 我有以下查询 SELECT t1 a t1 b t2 a SELECT TOP 1 t1 a FROM table1 t1 WHERE t1 b t2 a ORDER BY t1
  • 将 pandas 中的时间序列重新采样为每周间隔

    如何将 pandas 中的时间序列重新采样为每周频率 其中每周从任意一天开始 我看到有一个可选的关键字库 但它只适用于短于一天的时间间隔 你可以通过锚定偏移量 http pandas pydata org pandas docs stabl
  • C++ boost 库 - 写入 ini 文件而不覆盖?

    我正在尝试使用 boost 库的 ini 解析器和属性树编写 ini 文件 该文件是分阶段写入的 我的意思是每个函数都会写入其中的一部分 最后 我只留下最后的输出 而不是写下所有内容 我在编写时使用的示例代码 property tree p
  • selenium.open() 在迭代测试中变得无响应

    我有一组必须使用不同参数执行的测试步骤 我已在 Eclipse TestNG 中编写了此脚本 由 Excel 工作表提供的参数驱动 现在 测试步骤包括设置页面的属性 然后打开另一个页面以确认该属性已设置 所以 实际上 我使用了一个简单的se
  • Spark,如何打印查询?

    我正在使用 pyspark df self sqlContext read option es resource indexes format org elasticsearch spark sql load df df filter df
  • 如何用Java管理Linux文件权限?

    是否有任何机制来获取和设置文件 目录权限 比如我想以shell的方式显示一个文件的权限 rwxr xr 使用 Java 可以做到这一点吗 我知道里面有一些方法File类来知道文件是否canExecute canRead and canWri
  • Apple-app-site-association 文件无法下载

    我已将我的 apple app site association 文件上传到我的 HTTPS Web 服务器的根目录之后 我已在 xcode 中添加了我的关联域 我已遵循 Apple 通用链接教程 SWC 拒绝重定向到 https exam
  • 为什么网格模板区域中缺少的网格区域名称会创建额外的轨道?

    我创建了一个简单的 CSS 网格 我决定不指定grid template grid template columns grid template rows特性 相反 我开始于grid template areas 并分配地区名称 to th
  • 推特引导程序中缩小尺寸?

    当 在我的浏览器中 我缩小两次 ctrl ctrl 而不是默认的 使用 ctrl 0 查看时 我喜欢使用 twitter bootstrap 的所有项目的大小 缩放会影响字体大小 响应式设计以及我想使用 bootstrap 的其他十几个重要
  • 如何允许 UWP ListView 滚动到最后一项?

    我有一个 ListView 其中包含一堆大小不规则的项目 当您滚动 ListView 时 最后一项的底部将最终位于控件的底部 您无法继续滚动 如果最后一项小于控件 我想要top最后一个项目能够滚动到控件的顶部 如果该项目比控件大 我对默认行
  • Rails 3.2.6 和通过迁移创建数据库视图

    我使用的是 Rails 3 2 6 我需要创建一个数据库 VIEW 像往常一样 我创建了一个迁移 并尝试使用执行方法来实现目标 不幸的是 迁移生成的是表 而不是视图 为什么 提前谢谢了 毛罗 UPDATE 我想要如下的东西 class Cr
  • C# 中 Delphi“shl”的等价物是什么?

    我正在基于 Delphi 转换代码 用 C 制作一个应用程序 但我发现了一个我不认识的命令 shl 我想知道是否有与 C 等效的命令 提前致谢 Shl is 左移 http www delphibasics co uk RTL asp Na
  • 如何静态检测缺失的 @Override 注释?

    在 Java 5 和 Java 6 之间 有关的规则 Override源自接口 而不是超类 的方法的注释已更改 在不允许之前 但在允许之后 然而 他们并不是required通过javac 某些 IDE 例如 eclipse 可能会针对此类缺
  • 为什么 constexpr 不是所有函数的默认值? [复制]

    这个问题在这里已经有答案了 在放宽 constexpr 的规则后 这些函数似乎可以在任何地方使用 它们也可以在常量 constexpr 和局部 可变 变量上调用 所以对我来说 这似乎只是编译器的提示 如内联 我只是继续在各处编写它 如果编译
  • ASP.NET Core 应用程序的解决方案资源管理器中的文件嵌套

    当我创建 ASP NET Core 2 0 Razor Page 模板项目时 每个 cshtml 及其 cs 文件都被拆分 我不知道为什么 几分钟前它工作正常 但我不记得我做了什么 也许是 SDK 或 Visual Studio 的设置 我
  • 语法:自上而下和自下而上的区别?

    自上而下和自下而上语法有什么区别 举个例子就太好了 首先 语法本身不是自上而下或自下而上的 parser是 尽管有些语法可以被一种语法解析 但不能被另一种语法解析 从实践的角度来看 主要区别在于大多数手写解析器是自上而下的 而更大比例的机器
  • 查找资源字典时出现设计时错误 - 项目之间不一致

    TLDR 新引用外部的屏幕ResourceDictionary在运行时可以正确地以 VS2015 样式编写文件 但在设计时则不然 是什么赋予了 在工作中 我们有一个 WinForms 产品 其中包含manyWinForms 屏幕上有一位开发