.net-core - 加载动态加载程序集引用的 Nuget 包时出现 FileNotFoundException
问题描述
我正在将 .NET Framework 应用程序升级到 .NET Core 3,但遇到了一个问题:
我的应用程序有两个程序集,我们称它们为Alpha
(一个可执行文件)和Beta
(一个库)。两者都是同一解决方案中的 .NET Core 3 项目,但Alpha
不直接引用Beta
. Beta
引用第 3 方 Nuget 包Charlie
(一个 .NET Standard 1.1 库)。
Alpha
Beta
使用动态加载Assembly.LoadFile(@"Path\To\Beta.dll")
。这工作正常,并且Alpha
能够成功调用(使用反射),除了一旦它自动尝试根据需要加载程序集Beta
就会引发异常:Charlie
Beta
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 中似乎不起作用。两者Beta
和Charlie
都被复制到Alpha
的输出文件夹中。
添加Beta
作为引用Alpha
使其工作,但我不希望这样做,因为Alpha
没有业务直接调用任何东西Beta
(除了通过反射调用的几个定义明确的方法)。
我怎样才能解决这个问题,而不添加Beta
或Charlie
作为依赖项Alpha
?
解决方案
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.
推荐阅读
- angular - 如何在 Angular 6 中调用 http get 服务之前从 JSON 文件中读取 url
- python - Matlab findpeaks算法到Python
- kotlin - kotlin 检查数据 json 字符串是否为空
- angular - 如何在 Linux 服务计划上的 Azure Web App 中为 Angular 设置“默认页面”
- mongodb - Mongo 聚合对象与 $lookup 使用不匹配的值
- java - 黄瓜选项中的 Teamcity 多个标签
- laravel - 在 octobercms 的会话中如何以及在何处记录数据
- python - Django:过滤器()或获取()
- python - Python从多个类中读取数据并链接到主类对象的最佳方法
- javascript - 检查是webview还是浏览器