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

如何在.NET项目中仅为Windows ARM64平台添加FFmpeg非官方构建?

针对Windows ARM64平台条件引入FFmpeg非官方构建包的解决方案

问题背景

官方FFmpeg仓库默认无法编译Windows ARM64版本,因此需要在项目中添加非官方构建包,但仅希望在用户针对Windows ARM64平台构建时才引入该包,其他平台自动使用官方版本。

尝试的配置如下:

<ItemGroup Condition="'$(RuntimeIdentifier)' == 'win-arm64'"

    <Content Include="ffmpeg.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 

    <Content Include="ffprobe.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 

</ItemGroup>

出现的问题:配置可正常构建,但目标文件未被包含;尝试用!=排除其他平台时,文件会被包含但作用于所有平台,排除规则未生效。

解决方案

1. 修复ItemGroup语法错误

当前配置的ItemGroup标签未闭合(缺少>),这是导致条件判断失效的核心原因。修正后的完整配置:

<ItemGroup Condition="'$(RuntimeIdentifier)' == 'win-arm64'">
    <Content Include="ffmpeg.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    <Content Include="ffprobe.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup>

2. 确保构建时正确传递RuntimeIdentifier

如果通过命令行构建,必须明确指定目标平台参数,否则RuntimeIdentifier变量未被初始化,条件判断不会触发:

dotnet build -r win-arm64

在Visual Studio中,需在项目属性的“生成”选项卡中,选择目标平台为ARM64(Windows)。

3. 补充跨平台排除规则

为避免非Windows ARM64平台意外包含这些文件,可添加反向排除的配置:

<!-- Windows ARM64平台包含非官方构建包 -->
<ItemGroup Condition="'$(RuntimeIdentifier)' == 'win-arm64'">
    <Content Include="ffmpeg.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    <Content Include="ffprobe.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup>

<!-- 其他平台移除非官方文件 -->
<ItemGroup Condition="'$(RuntimeIdentifier)' != 'win-arm64' OR '$(RuntimeIdentifier)' == ''">
    <Content Remove="ffmpeg.exe" />
    <Content Remove="ffprobe.exe" />
</ItemGroup>

添加OR '$(RuntimeIdentifier)' == ''是为了处理未指定平台的默认构建场景。

4. 适配带版本的RuntimeIdentifier(可选)

如果项目需要支持win10-arm64、win11-arm64这类带版本的RuntimeIdentifier,可使用通配符匹配:

<ItemGroup Condition="'$(RuntimeIdentifier)' Like 'win%-arm64'">
    <Content Include="ffmpeg.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    <Content Include="ffprobe.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:00:08