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

WPF (.NET 6)使用Assembly.LoadFrom无法正确加载引用的问题

.NET 6插件依赖加载问题解决方案

问题核心

.NET 6(及.NET Core系列)的程序集加载策略和.NET Framework存在差异:.NET Framework会自动从应用程序基目录加载依赖,但.NET 6默认不会自动扫描关联依赖,哪怕依赖文件在根目录,也无法被Assembly.LoadFrom加载的插件自动发现,这就是抛出FileNotFoundException的原因。Assembly.LoadFrom在.NET 6中仍然可用,但行为逻辑已调整。

替代方案

1. 使用AssemblyLoadContext(推荐)

这是.NET Core/.NET 6官方推荐的插件加载方式,可为插件创建独立加载上下文,自定义依赖搜索逻辑,无需提前手动加载依赖:

var pluginPath = Path.GetFullPath("MyPlugin.dll");
var pluginDir = Path.GetDirectoryName(pluginPath);
var loadContext = new AssemblyLoadContext(null, isCollectible: true);

// 注册依赖解析回调
loadContext.Resolving += (ctx, assemblyName) => {
    var assemblyFilePath = Path.Combine(pluginDir, $"{assemblyName.Name}.dll");
    return File.Exists(assemblyFilePath) ? ctx.LoadFromAssemblyPath(assemblyFilePath) : null;
};

// 加载插件程序集
var pluginAssembly = loadContext.LoadFromAssemblyPath(pluginPath);
// 后续扫描IPlugin实现逻辑...

该方式既保持主程序与插件的隔离,又能自动处理插件的依赖加载。

2. 配置程序集探测路径

通过配置让运行时自动扫描应用根目录的依赖,还原类似.NET Framework的行为:

  • 在主项目.csproj中添加:
<PropertyGroup>
  <RuntimeHostConfigurationOption Include="additionalProbingPaths" Value="." />
</PropertyGroup>
  • 或手动修改runtimeconfig.json:
{
  "runtimeOptions": {
    "additionalProbingPaths": ["."]
  }
}

3. 插件目录隔离

将插件及其依赖统一放在独立子目录中,加载时以该目录为基础路径创建AssemblyLoadContext,运行时会自动扫描该目录下的依赖,同时避免根目录文件混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:40:41