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

时间:2012-08-19 20:47:44

标签: visual-studio-2010 c#-4.0 dll reference directory

我有一个包含1个EXE和大约7个DLL的C#项目。我想要的是EXE旁边的一个名为“Library”(或类似的东西)的文件夹,它包含所有的DLL,因此它更有条理,对最终用户来说看起来更好。

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

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

谢谢!

修改

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

3 个答案:

答案 0 :(得分:1)

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

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

我知道这并没有直接回答你的问题,但是如果你想要一个“xcopy”可安装的.net应用程序,那么在流程启动早期手动调用DLL上的LoadFrom应该可以解决问题。

答案 1 :(得分:1)

pull request是您的解决方案。它做得很漂亮!

答案 2 :(得分:0)

SetDllDirectory()+仔细编码AssemblyResolve。在一个非常重要的项目中为我工作,没有DLL地狱。

https://github.com/TASVideos/BizHawk/blob/master/BizHawk.Client.EmuHawk/Program.cs