首页 > 解决方案 > 加载动态加载程序集引用的 Nuget 包时出现 FileNotFoundException

问题描述

我正在将 .NET Framework 应用程序升级到 .NET Core 3,但遇到了一个问题:

我的应用程序有两个程序集,我们称它们为Alpha(一个可执行文件)和Beta(一个库)。两者都是同一解决方案中的 .NET Core 3 项目,但Alpha直接引用Beta. Beta引用第 3 方 Nuget 包Charlie(一个 .NET Standard 1.1 库)。

AlphaBeta使用动态加载Assembly.LoadFile(@"Path\To\Beta.dll")。这工作正常,并且Alpha能够成功调用(使用反射),除了一旦它自动尝试根据需要加载程序集Beta就会引发异常:CharlieBeta

System.IO.FileNotFoundException: 'Could not load file or assembly 'Charlie, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXX'. The system cannot find the file specified.'

这在 .NET Framework 中运行良好,但在 .NET Core 中似乎不起作用。两者BetaCharlie都被复制到Alpha的输出文件夹中。

添加Beta作为引用Alpha使其工作,但我不希望这样做,因为Alpha没有业务直接调用任何东西Beta(除了通过反射调用的几个定义明确的方法)。

我怎样才能解决这个问题,而不添加BetaCharlie作为依赖项Alpha

标签: .net-core

解决方案


It turns out that if I load the Beta assembly using Assembly.LoadFrom instead of Assembly.LoadFile then it works, but I don't understand why. If someone can post an explanation of why, then I'll happily accept and upvote your answer.


推荐阅读