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

.NET 6迁移至.NET 8后bin目录缺失部分Microsoft.Extensions相关DLL

.NET 6迁移至.NET 8后bin\Debug缺失依赖DLL的解决方法

问题概述

项目从.NET 6迁移到.NET 8后,bin\Debug目录中缺失了一批依赖DLL(清单见下方),项目可正常构建,但运行应用或PowerShell模块时会抛出类似错误:

Could not load file or assembly 'Microsoft.Extensions.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.

缺失的DLL清单:

  • Microsoft.Extensions.Caching.Abstractions.dll
  • Microsoft.Extensions.Caching.Memory.dll
  • Microsoft.Extensions.Configuration.Abstractions.dll
  • Microsoft.Extensions.Configuration.Binder.dll
  • Microsoft.Extensions.Configuration.dll
  • Microsoft.Extensions.Configuration.FileExtensions.dll
  • Microsoft.Extensions.Configuration.Json.dll
  • Microsoft.Extensions.DependencyInjection.Abstractions.dll
  • Microsoft.Extensions.DependencyInjection.dll
  • Microsoft.Extensions.FileProviders.Abstractions.dll
  • Microsoft.Extensions.FileProviders.Physical.dll
  • Microsoft.Extensions.FileSystemGlobbing.dll
  • Microsoft.Extensions.Http.dll
  • Microsoft.Extensions.Logging.Abstractions.dll
  • Microsoft.Extensions.Logging.dll
  • Microsoft.Extensions.Options.dll
  • Microsoft.Extensions.Primitives.dll
  • System.Security.Cryptography.Pkcs.dll
  • System.Text.Encodings.Web.dll

解决方法

1. 强制设置依赖包的复制本地属性

右键项目→编辑项目文件(.csproj),为缺失的对应NuGet包添加CopyLocal="true"配置,确保构建时将DLL复制到输出目录。示例:

<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0">
  <CopyLocal>true</CopyLocal>
</PackageReference>

注:需对所有缺失的DLL对应的NuGet包逐一配置,或直接批量添加该属性

2. 全局启用锁定文件依赖复制

在项目文件的<PropertyGroup>节点中添加以下配置,强制将所有NuGet锁定文件中的依赖组件复制到输出目录:

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

这个配置会覆盖默认的框架共享组件处理逻辑,确保所有依赖都被复制到bin目录。

3. 清理重建并重置NuGet缓存

  • 手动删除项目的bin、obj目录
  • 执行命令清理NuGet缓存:dotnet nuget locals all --clear
  • 依次运行dotnet restore和dotnet build,重新恢复并构建项目

4. 针对PowerShell模块的额外处理

如果是PowerShell模块场景,需在模块的.psd1文件中更新RequiredAssemblies列表,明确指定缺失DLL的路径,确保PowerShell加载模块时能找到依赖:

RequiredAssemblies = @(
    '.\Microsoft.Extensions.Http.dll',
    # 其他缺失DLL路径
)

问题原因说明

.NET 8对框架共享组件的分发逻辑做了优化,部分Microsoft.Extensions系列组件默认被标记为框架运行时共享组件,不会复制到项目输出目录。但如果项目依赖未通过NuGet正确引用,或部署环境缺少对应的.NET 8运行时组件,就会触发找不到DLL的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:13