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

.NET Framework迁移至.NET Core 8后Assembly.LoadFrom加载失败问题

.NET Core 8中Assembly.LoadFrom加载程序集失败的解决方案

核心原因

.NET Core/.NET 5+的程序集加载机制与.NET Framework差异显著:前者对程序集路径、架构匹配、加载上下文的要求更严格,Assembly.LoadFrom的行为也做了调整,不再兼容.NET Framework中宽松的加载逻辑。

排查与解决步骤

1. 确认路径完整性

首先检查待加载程序集的路径是否包含完整的.dll后缀:
.NET Framework会自动尝试补全缺失的.dll后缀,但.NET Core不会。你的代码中路径DT0WDX13缺少后缀,需修改为:

var path = @"D:\Code\Trial\App1\App1\bin\x86\Debug\net8.0-windows10.0.18362.0\DT0WDX13.dll";

2. 使用AssemblyLoadContext加载(推荐方案)

.NET Core推荐通过AssemblyLoadContext管理外部程序集加载,避免上下文冲突,这也是最可靠的方式:

using System.Runtime.Loader;

private void myButton_Click(object sender, RoutedEventArgs e)
{
    myButton.Content = "Clicked";
    var dllPath = @"D:\Code\Trial\App1\App1\bin\x86\Debug\net8.0-windows10.0.18362.0\DT0WDX13.dll";

    // 创建可回收的自定义加载上下文
    var loadContext = new AssemblyLoadContext(null, isCollectible: true);
    try
    {
        var assembly = loadContext.LoadFromAssemblyPath(dllPath);
        // 加载成功后可执行后续逻辑,比如反射调用类型
    }
    catch (Exception ex)
    {
        myButton.Content = $"加载失败: {ex.Message}";
    }
    finally
    {
        // 释放加载上下文(仅当isCollectible为true时生效)
        loadContext.Unload();
    }
}

3. 验证架构匹配

确保待加载的.dll与当前应用的目标架构完全一致:

  • 你的应用编译为x86,需确认DT0WDX13.dll也是x86架构编译的;
  • 若架构不匹配,会抛出BadImageFormatException,此时需调整应用或待加载程序集的目标架构。

4. 捕获异常定位具体问题

在代码中捕获异常,根据错误信息精准排查:

  • FileNotFoundException:路径错误、文件不存在或权限不足;
  • BadImageFormatException:架构不兼容、程序集损坏或不是.NET程序集;
  • FileLoadException:程序集已被加载到其他上下文,或存在版本冲突。

补充说明

Assembly.LoadFrom在.NET Core中仅适用于加载应用依赖链中的程序集,对于外部独立程序集,AssemblyLoadContext是更合适的选择,它能隔离加载的程序集,避免影响主应用的上下文。

内容的提问来源于stack exchange,提问作者Jean-Marc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:53:08