You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8中MediaElement的RelativeOrAbsolute为何无法正常工作?

.NET 8 WPF MediaElement 相对路径/Pack URI 播放问题排查

核心问题分析

从.NET Framework 4.5.1迁移到.NET 8后,MediaElement无法通过相对路径或Pack URI加载视频、但绝对路径正常的情况,核心差异集中在资源嵌入配置和路径解析逻辑的细节变化上。

排查与解决步骤

  • 确认视频文件的生成属性
    在项目中选中视频文件,右键打开属性面板:

    • 生成操作:必须设置为Resource(而非Content或None)
    • 复制到输出目录:选择不复制(因为资源已嵌入到程序集内,无需复制到输出目录)
      注:.NET Framework中部分场景下Content属性也能被Pack URI识别,但.NET 8对资源分类的校验更严格,Resource是Pack URI指向嵌入资源的标准配置。
  • 校验Pack URI格式
    你的Pack URI格式本身符合规范,但需确认两个细节:

    • SampleProject是当前程序集的准确名称(和项目文件中的AssemblyName一致,注意大小写)
    • 路径层级完全匹配:Videos/G.mp4需和项目中的文件夹结构严格对应(.NET 8在非Windows平台对路径大小写敏感,Windows平台虽兼容但建议严格匹配)
  • 相对路径的工作目录问题
    .NET 8默认的调试/运行工作目录和.NET Framework存在差异:

    • 调试时,工作目录是项目文件所在目录(而非输出目录),若视频文件放在输出目录,相对路径会失效
    • 可通过Directory.GetCurrentDirectory()输出当前工作目录,调整视频文件的相对位置,或手动指定输出目录为工作目录
  • 备选资源加载方式
    如果直接设置Pack URI仍失效,可尝试通过资源流加载:

    Uri videoUri = new Uri("pack://application:,,,/SampleProject;component/Videos/G.mp4", UriKind.RelativeOrAbsolute);
    var resourceStream = Application.GetResourceStream(videoUri);
    if (resourceStream != null)
    {
        myMediaElement.SetSource(resourceStream.Stream, resourceStream.ContentType);
    }
    

参考文档要点

  • .NET 8 WPF资源系统:官方文档明确了嵌入资源的生成操作要求,以及Pack URI的解析规则,和.NET Framework的差异主要在资源分类的严格性上
  • WPF MediaElement加载规则:文档提到,通过Pack URI加载嵌入资源时,必须确保资源的生成操作设置为Resource,否则无法被正确解析

内容的提问来源于stack exchange,提问作者wpf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:45