You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure App Service中Accord.Video.FFMPEG 3.8.0部署问题求助

解决Azure App Service上Accord.Video.FFMPEG 3.8.0的加载问题

我之前帮开发者解决过类似的Azure部署问题,你的情况核心是原生FFMPEG依赖DLL没有被正确部署到Azure环境,或者平台位数不匹配——本地能运行是因为你手动把DLL放到了IIS的运行目录,但Azure部署过程中这些文件没被自动包含进去。下面是具体的解决步骤:

1. 确保原生DLL被正确包含在项目中

Accord.Video.FFMPEG的x64 DLL是原生非托管库,常规NuGet引用可能不会自动把它复制到输出目录,需要手动配置:

  • 找到项目的NuGet包目录,路径一般是packages/Accord.Video.FFMPEG.3.8.0/runtimes/win-x64/native,里面应该有Accord.Video.FFMPEG.x64.DLL
  • 把这个DLL复制到Web项目的bin/x64文件夹(没有的话直接新建)
  • 选中这个DLL,在Visual Studio的属性窗口里设置:
    • 复制到输出目录:选择始终复制
    • 生成操作:选择内容

2. 配置Azure App Service为64位运行

因为你用的是x64版本的DLL,必须确保Azure的运行环境是64位:

  • 登录Azure门户,找到你的App Service
  • 进入配置 > 常规设置
  • 平台选项里,把默认的32位改成64位,点击保存

3. 验证部署包是否包含这些DLL

  • 如果用Visual Studio发布:在发布向导的预览步骤里,检查是否包含了bin/x64下的DLL文件。如果没看到,回去确认第一步的复制属性是否设置正确。
  • 如果用CI/CD工具(比如GitHub Actions、Azure DevOps):需要在构建步骤中添加复制命令,把原生DLL复制到输出目录。比如Azure DevOps的YAML可以加这段:
    - task: CopyFiles@2
      inputs:
        SourceFolder: '$(SolutionDir)/packages/Accord.Video.FFMPEG.3.8.0/runtimes/win-x64/native'
        TargetFolder: '$(Build.ArtifactStagingDirectory)/bin/x64'
        OverWrite: true
    

4. 检查Azure服务器上的文件结构

可以通过Kudu工具验证文件是否存在:

  • 在Azure门户的App Service页面,点击高级工具 > Go,进入Kudu控制台
  • 选择调试控制台 > CMD,导航到site/wwwroot/bin/x64,确认Accord.Video.FFMPEG.x64.DLL是否存在。如果没有,重新部署并检查前面的步骤。

补充:错误原因说明

你遇到的报错本质是:

[FileNotFoundException: Could not load file or assembly 'Accord.Video.FFMPEG.x64.DLL' or one of its dependencies. The specified module could not be found.] System.Reflection.RuntimeAssembly._nLoad(...)

这要么是DLL不在应用的搜索路径里,要么是Azure运行的32位进程无法加载64位的DLL,所以前面的平台配置和文件复制是解决问题的关键。

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

火山引擎 最新活动