我有一个包含1个EXE和大约7个DLL的C#项目。我想要的是EXE旁边的一个名为“Library”(或类似的东西)的文件夹,它包含所有的DLL,因此它更有条理,对最终用户来说看起来更好。
我知道这可以使用AppConfig完成,但我不想要在EXE旁边的其他文件。我想要的只是主要的EXE和文件夹。
是否可以使用AppConfig并嵌入或加载DLL而不使用不会改变我当前使用DLL的方式的AppConfig?我知道你可以在运行时加载DLL,但我认为这不是我想要的。
谢谢!
修改
我知道这样做的利弊,所以请只回答如何做到这一点,而不是为什么我应该或不应该这样做的建议。
答案 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