runtimes\win-AnyCPU\native\DlibDotNetNativeDnnAgeClassification.dll”,原因是找不到该文件

目录

[方案一:添加 ARM64 运行时(推荐)](#方案一:添加 ARM64 运行时(推荐))

[方案二:指定目标平台为 x64](#方案二:指定目标平台为 x64)

[方案三:禁用 FaceRecognitionDotNet 的自动部署(临时方案)](#方案三:禁用 FaceRecognitionDotNet 的自动部署(临时方案))

[方案四:手动添加缺失的 DLL](#方案四:手动添加缺失的 DLL)

方案五:条件编译(针对不同架构)

[方案六:检查并清理 NuGet 包缓存](#方案六:检查并清理 NuGet 包缓存)

快速解决方案

根本原因分析


这个错误是因为 FaceRecognitionDotNet 包缺少 ARM64 架构的支持文件。这个问题通常出现在你在 ARM64 架构的设备(如 Apple Silicon Mac 或 Windows ARM 设备)上编译项目。

以下是几种解决方案:

方案一:添加 ARM64 运行时(推荐)

在项目文件中添加 ARM64 运行时的回退配置:

xml

复制代码
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- 其他配置 -->
    <RuntimeIdentifiers>win-x64;win-x86;win-arm64</RuntimeIdentifiers>
  </PropertyGroup>

  <ItemGroup>
    <!-- 为 ARM64 添加回退 -->
    <RuntimeHostConfigurationOption Include="System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture" 
                                   Value="X64" 
                                   Condition="'$(RuntimeIdentifier)' == 'win-arm64'" />
  </ItemGroup>
</Project>

方案二:指定目标平台为 x64

在项目文件中显式指定目标平台:

xml

复制代码
<PropertyGroup>
  <PlatformTarget>x64</PlatformTarget>
  <!-- 或者 -->
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

或者在 Visual Studio 中:

  1. 右键点击项目 → 属性

  2. 选择"生成"选项卡

  3. 将"平台目标"设置为 x64

方案三:禁用 FaceRecognitionDotNet 的自动部署(临时方案)

xml

复制代码
<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  <!-- 禁用特定包的自动复制 -->
  <ExcludeAssets>runtime</ExcludeAssets>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="FaceRecognitionDotNet" Version="1.3.0.7">
    <ExcludeAssets>runtime</ExcludeAssets>
  </PackageReference>
</ItemGroup>

方案四:手动添加缺失的 DLL

如果项目需要支持 ARM64,你可以手动处理:

  1. 下载或编译 ARM64 版本的 DLL

  2. 创建目录结构:

    text

    复制代码
    YourProject/
    ├── runtimes/
    │   ├── win-arm64/
    │   │   └── native/
    │   │       └── DlibDotNetNativeDnnAgeClassification.dll
    │   └── win-x64/
    │       └── native/
    │           └── (原有的 x64 DLL)
  3. 在项目文件中确保包含这些文件:

xml

复制代码
<ItemGroup>
  <Content Include="runtimes\**\*.*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

方案五:条件编译(针对不同架构)

xml

复制代码
<PropertyGroup>
  <TargetFrameworks>net6.0;net6.0-windows</TargetFrameworks>
  <Platforms>AnyCPU;x64;ARM64</Platforms>
</PropertyGroup>

<PropertyGroup Condition="'$(Platform)' == 'ARM64'">
  <!-- 对于 ARM64 平台,使用 x64 的运行时 -->
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

方案六:检查并清理 NuGet 包缓存

有时 NuGet 包缓存可能损坏:

  1. 清理 NuGet 缓存:

    powershell

    复制代码
    # 清除所有 NuGet 缓存
    dotnet nuget locals all --clear
  2. 删除 binobj 文件夹

  3. 重新生成项目

快速解决方案

如果你只是想在当前设备上运行,最快速的方法是:

  1. 在 Visual Studio 中

    • 点击顶部菜单:生成 → 配置管理器

    • 将"活动解决方案平台"改为 x64

    • 如果没有 x64,点击"新建"创建

  2. 或者修改项目文件

xml

复制代码
<PropertyGroup>
  <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>

根本原因分析

这个错误是因为 FaceRecognitionDotNet 包(版本 1.3.0.7)不包含 ARM64 架构的原生 DLL 文件。该包只提供了 win-x86win-x64 的运行时。

建议 :如果项目需要支持 ARM64,考虑联系 FaceRecognitionDotNet 包的维护者,请求添加 ARM64 支持,或者寻找替代的库。

相关推荐
晨星shine3 天前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
用户298698530144 天前
.NET 文档自动化:Spire.Doc 设置奇偶页页眉/页脚的最佳实践
后端·c#·.net
用户3667462526744 天前
接口文档汇总 - 2.设备状态管理
c#
用户3667462526744 天前
接口文档汇总 - 3.PLC通信管理
c#
Ray Liang5 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Scout-leaf8 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530148 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
mudtools9 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的9 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21889 天前
.NET 本地Db数据库-技术方案选型
windows·c#