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




