C# 从不同文件夹加载 DLL?

Lan*_*ens 7 directory dll reference visual-studio-2010 c#-4.0

我有一个 C# 项目,其中包含 1 个 EXE 和大约 7 个 DLL。我想要的是 EXE 旁边有一个名为“Library”(或类似名称)的文件夹,其中包含所有 DLL,这样它更有组织性,并且对于最终用户来说看起来更好。

我知道这可以使用 AppConfig 来完成,但我不想要 EXE 旁边的另一个文件。我想要的只是主 EXE 和文件夹。

是否可以使用 AppConfig 并嵌入它或加载 DLL,而不使用不会改变我当前使用 DLL 的方式的 AppConfig?我知道你可以在运行时加载 DLL,但我不认为这就是我正在寻找的。

谢谢!

编辑

我知道这样做的优点和缺点,所以请只回答如何做到这一点,而不是关于为什么我应该或不应该这样做的建议。

dou*_*536 2

使用System.Reflection.Assembly.LoadFrom(path)

LoadFrom将允许它在与目标 dll 相同的文件夹中查找任何依赖项。如果您使用Load,那么它不会考虑与您加载的 dll 位于同一文件夹中的 dll。

我知道这并不能直接回答你的问题,但LoadFrom如果你想要一个“xcopy”可安装的 .net 应用程序或其他东西,那么在进程启动早期手动调用 DLL 应该可以解决问题。

  • CLR 按需加载程序集,如果程序集已加载到应用程序域中,则不会加载。因此,如果您使用反射预先强制加载所有程序集,您仍然可以使用强引用。只是应用程序文件夹中不会有 dll,并且 clr 不会查找它,因为它们已经加载。这意味着手动/自动将 dll 从根文件夹移动到您的最爱文件夹 (2认同)