在 WPF 应用程序中使用 .NET Standard 程序集中的内容文件

2023-12-05

我想将文件嵌入到 .NET Standard 程序集中,并在 WPF 应用程序的 XAML 中使用它。

如果您将构建操作设置为Resource在其他程序集中使用嵌入文件非常容易,但是您必须使用<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> and <UseWPF>true</UseWPF>能够使用Resource像这样构建动作:

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <ItemGroup>
    <Resource Include="Resources\Image.png" />
  </ItemGroup>

然后您可以使用另一个程序集中的此 Uri:

pack://application:,,,/ReferencedAssembly;component/Resources/Image.png

如这里所示:

https://learn.microsoft.com/en-us/dotnet/framework/wpf/app-development/pack-uris-in-wpf#resource-file-pack-uris

我的问题:

如果你只想<Project Sdk="Microsoft.NET.Sdk">并且不想<UseWPF>true</UseWPF>那么你必须使用Content构建操作,因为它不需要 WPF,如下所示:

https://learn.microsoft.com/en-us/visualstudio/ide/build-actions

并像这样使用它:

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="Resources\Image.png">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

然后您应该能够从另一个程序集中使用此 Uri:

pack://application:,,,/Resources/Image.png

如这里所示:

https://learn.microsoft.com/en-us/dotnet/framework/wpf/app-development/pack-uris-in-wpf#content-file-pack-uris

但我得到以下异常:

Exception thrown: 'System.Resources.MissingManifestResourceException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in PresentationFramework.dll
Exception thrown: 'System.IO.IOException' in PresentationCore.dll
System.Windows.Data Error: 6 : 'TargetDefaultValueConverter' converter failed to convert value 'pack://application:,,,/Resources/Image.png' (type 'String'); fallback value will be used, if available. BindingExpression:Path=BackgroundImage; DataItem='NavigationNode' (HashCode=663215); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') IOException:'System.IO.IOException: Cannot locate resource 'resources/image.png'.

我已经清理并重建了整个解决方案。

我究竟做错了什么?

重要提示:我需要在 xaml 中使用包 URI - 太多,无法将所有现有代码从 xaml 转换为 cs!


如果您引用复制到输出目录的内容文件,则可以使用路径而不是包 URI。尝试这个:

image.Source = new BitmapImage(new Uri($@"{System.AppContext.BaseDirectory}\Resources\Image.png",
    UriKind.Absolute));

如果由于某种原因您仍然需要使用 pack URI,请替换pack://application:,,, with pack://siteoforigin:,,,在路径中,它应该可以工作。

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

在 WPF 应用程序中使用 .NET Standard 程序集中的内容文件 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • 更新可变 HashMap 值,这是一个可变集合

    我有一张如下所示的地图 Map A gt Collection B 该映射会循环更新 然而 特殊之处在于 更新主要意味着将元素 B 添加到 Collection B 对于某些键 A 我试图找出是否可以通过将 Collection 的类型从
  • 需要在solaris命令中重新排列和求和列

    我有以下名为 atp csv 文件的数据 Date Time M ID N ID Status Desc AMount Type 2015 01 05 00 00 00 076 1941321748 BD9010423590206 200
  • 如何在 MatLab 中设计 SOAP 调用

    我根本不清楚如何从 MatLab 调用网络服务 我正在尝试申请本指南但我不明白几个部分 比如这个 哪里指定是GET还是POST What is 名称空间 我应该如何提供我拥有的 WSDL 文件 我很迷失所以任何提示将不胜感激 如果您有权访问
  • EF Code First Mysql 到 SQL Server

    我有一个 MVC 5 应用程序 我首先将其配置为使用 Mysql 但现在希望它使用 SQL Server 我的应用程序首先使用代码和迁移来生成数据库 更改所有必需的配置后 我尝试从包管理控制台运行更新数据库 但我不断收到此错误 System
  • 同步块是否会阻止其他线程向同步列表中插入数据?

    所以我正在开发一个多线程java应用程序 我有这个问题 List
  • 负数和正数的正则表达式

    我需要一个输入字段的正则表达式 以允许负数和正数 并且不允许字母 特殊字符 我见过其他人实现了这一点 但他们允许在字符串中的任何位置使用减号 而我只想允许在字符串的开头使用减号 注意 我想允许用户使用箭头 del home 键等 这是获取正
  • 如何在 SSRS 2008 R2 中将图表的宽度与 Tablix 的宽度对齐?或者如何使用 DynamicWidth 属性?

    我正在创建 SSRS 报告 该报告由 tablix 和图表组成 两者都描述相同的数据 即相同的数据库查询 Tablix 的实际列数由查询返回的行数动态决定 我们以按列的方式显示记录 Example 如果查询返回 5 条记录 则 Tablix
  • 如何将缓存清单添加到 Meteor 应用程序?

    嗯 添加就没有问题了 但是如何生成缓存清单呢 我需要以某种方式获取 Meteor 生成的 CSS 和 JS 组合的路径 http www whatwg org specs web apps current work manifests Up
  • 查找左上角和右下角点 (C++)

    我正在为我正在进行的项目寻求帮助 我正在做的是多边形近似算法 我已经获得了边界的所有点 但为了启动算法 我需要从点集中找到左上角和右下角的点 所有点都存储在一个结构体数组中 其中包含每个点的 x 和 y 坐标 关于循环点数组的简单方法有什么
  • 如何在Android中的.csv文件中逐行写入contactname和contactno?

    我想从手机中获取联系人姓名和相应的联系人号码 并将其写入 csv文件 每行将包含整个联系人列表中每个人的联系人姓名和联系电话号码 联系方式怎么写 csv file 我编写了用于显示联系人姓名列的代码 但它仅显示一个联系人 这意味着它会覆盖现
  • 如何将 Map 对象写入文件

    我想从 a 写入文件Map目的 这是我的尝试 try stuMap put student getId student Path file Paths get student txt to create the file Files wri
  • MASM x64 中的跳转表实现?

    我正在尝试使用跳转表在汇编 MASM64 Windows x64 中实现算法 基本思想是 我需要对数据执行 3 种不同类型的操作 这些操作取决于一些变量 但我发现实现大量切换和许多冗长的实现很乏味 PUBLIC superFunc 40 v
  • JTidy java API 将 HTML 转换为 XHTML

    我正在使用 JTidy 从 HTML 转换为 XHTML 但我在我的 XHTML 文件中发现了这个标签 nbsp 我可以阻止它吗 这是我的代码 from html to xhtml try fis new FileInputStream h
  • 如何将 DatagridView 保存在 Xml 中并将 Xml 加载到 datagridView?

    您好 我想将数据从 datagridview 保存并加载到 xml 我的想法是 我可以将我的 datagridview 保存到 xml 中 gt date name xml 然后我可以加载此数据 对于这两个操作我想使用两种方法 gt Sav
  • 如何以编程方式在 C++ 或 Python 中列出 DLL 的依赖项?

    我目前正在使用 Boost Python 为 C 项目编写 Python 接口 问题是 如果缺少 DLL Python 会给我们一条非常无用的错误消息 ImportError DLL 加载失败 找不到指定的模块 根据这个网站不可能显示比这更
  • Prestashop 1.6 获取模块类的实例

    我有一个被重写的类OrderConfirmationControllerCore 我有一个带有类的模块Abra 我需要获取一个实例Abra类在OrderConfirmationControllerCore 我的代码是 class Order
  • PostSharp 参数验证 - 使用 RegularExpressionAttribute 查找前导/尾随空格

    我正在使用 PostSharp 3 1 通过验证属性来验证属性的参数 我想用正则表达式属性执行验证 它接受表示正则表达式的字符串 如果字符串有任何前导或尾随空格 但字符串可能在单词之间包含空格 我想抛出异常 在使用 PostSharp 属性
  • 反序列化 JSON 子文档

    我正在调用 JIRA Rest API 来接收工作日志对象列表 我收到的 JSON 看起来像 startAt 0 maxResults 1 total 1 worklogs self http www example com jira re
  • 有没有办法使用 LINQ 表达式填充集合?

    LINQ 的优点之一是允许您获取与集合相关的信息 而无需手动编写代码来迭代集合 有没有办法使用 LINQ 填充集合 从而避免编写循环 例如 假设我有以下代码 它适用于从 1 到 10 的数字范围 public static void Lin
  • 在 WPF 应用程序中使用 .NET Standard 程序集中的内容文件

    我想将文件嵌入到 NET Standard 程序集中 并在 WPF 应用程序的 XAML 中使用它 如果您将构建操作设置为Resource在其他程序集中使用嵌入文件非常容易 但是您必须使用