如何让我的程序从另一个文件夹引用程序集

本文关键字:另一个 文件夹 引用 程序集 程序 我的 | 更新日期: 2023-09-27 18:35:59

Background
首先,我确实在其他地方寻找解决方案并找到了这个解决方案,但这并不能解决我的问题。

我在 Visual Studio 的主项目中引用了一个程序集,但我需要从项目外部加载它,而不是在子文件夹中加载它。我可以使用调用加载程序集...

System.Reflection.Assembly.LoadFrom(myExternalAssemblyPath);

。但是该程序将无法运行并给我以下错误:

FileNotFoundException 未处理

无法加载文件或程序集"我的程序集,版本=2.0.0.0, Culture=中性,PublicKeyToken=null'或其依赖项之一。这 系统找不到指定的文件。

在调用程序集以加载程序集之前,我没有调用它,但程序仍然期望,甚至在它显然进入Main函数之前,DLL 就在程序的文件夹中。

奎西顿:
如何让我的程序在 Visual Studio 中仍引用它,但在实际运行程序时从其他位置加载它?是否有我需要指定某个指令来告诉程序等待加载它?还有其他解决方案吗?

注意:我不想将文件夹和 DLL 添加到 PATH 变量。这不是一个可行的解决办法。

如何让我的程序从另一个文件夹引用程序集

诀窍

是在应用程序域上实现AssemblyResolve事件。

http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx

您可以在此处帮助运行时查找它尝试加载但无法使用默认搜索策略找到的程序集。这应该很简单,运行时将为每个缺少的程序集调用处理程序,您只需从自定义路径自行加载它并从处理程序返回即可。

要记住的重要一点:在 .NET 中,JIT 在调用方法之前完全处理方法(到本机代码中)。如果 Main 方法使用您尝试加载的程序集中的任何类型或方法,则它不会像执行 Main 那样远。因此,Main 应设置程序集加载。所有其他代码(尤其是与相关程序集相关的代码)必须移动到另一个方法,以便单独进行 JIT 处理。