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 支持,或者寻找替代的库。

相关推荐
yngsqq3 小时前
CAD倒圆角——CAD自带倒圆角 VS c#重写的倒圆角
c#
花北城3 小时前
【C#】MES消耗类数量逻辑处理(物料消耗、打包装箱、生产订单派工等)
开发语言·c#
状元岐4 小时前
上位机通信-通信介质与通信协议关系
c#
状元岐5 小时前
上位机与下位机通信排查手册
c#
五花肉.5 小时前
C#面试核心考点和回答要点
面试·c#
oioihoii6 小时前
从C++到C#的转型完全指南
开发语言·c++·c#
Traced back6 小时前
C#/.NET 常用控件、属性、方法和语句大全(或许全)
开发语言·c#·.net
jiayong238 小时前
Word图文混排实战技巧
开发语言·c#·word
阿蒙Amon9 小时前
C#每日面试题-Dictionary和Hashtable的区别
java·面试·c#
乐园游梦记9 小时前
工业视觉(尤其是 3D/2.5D 相机场景)中针对不同数据类型、精度、用途设计的保存格式
数码相机·opencv·3d·c#