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

ClickOnce安装时无法加载Accord.Video.FFMPEG.dll及依赖项求助

解决ClickOnce发布后Accord.Video.FFMPEG.dll加载失败问题

核心原因

ClickOnce默认会给非托管依赖DLL添加.deploy后缀,但Accord.Video.FFMPEG.dll加载时会寻找原始文件名(如avcodec-57.dll),而非带.deploy的版本,导致依赖找不到。

解决方案

1. 禁止ClickOnce给FFmpeg依赖加.deploy后缀

  • 打开Visual Studio,右键项目 → 属性 → 发布 → 应用程序文件。
  • 在文件列表中找到所有av*.dll(avcodec-57.dll、avdevice-57.dll等),将每个文件的哈希设置为「排除」,发布状态保持「包含」。
  • 重新发布应用,此时安装目录中的这些DLL会保留原始文件名,不会带.deploy后缀。

2. 若上述方法无效,添加启动时重命名代码

在应用启动的入口(如Program.cs的Main方法最开头)加入以下代码,自动将.deploy后缀的依赖文件重命名为原始文件名:

using System.IO;

string appDir = AppDomain.CurrentDomain.BaseDirectory;
// 匹配所有av开头的.deploy文件
string[] deployDlls = Directory.GetFiles(appDir, "av*.dll.deploy");
foreach (string deployPath in deployDlls)
{
    string targetPath = Path.Combine(appDir, Path.GetFileNameWithoutExtension(deployPath));
    // 避免重复复制
    if (!File.Exists(targetPath))
    {
        File.Copy(deployPath, targetPath);
    }
}

3. 检查平台位数匹配

  • 确认项目的平台目标(右键项目 → 属性 → 生成 → 平台目标)与FFmpeg依赖DLL的位数完全一致:
    • 若用x86版本的FFmpeg DLL,项目必须设为x86;
    • 若用x64版本,项目设为x64,不要用Any CPU(可能导致自动切换位数不匹配)。

4. 验证Accord.Video.FFMPEG.dll的发布设置

  • 右键项目中的Accord.Video.FFMPEG.dll → 属性,确保「复制到输出目录」设为「始终复制」;
  • 在发布的应用程序文件列表中,该DLL的发布状态为「包含」,类型为「托管程序集」。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:01:30