我有一个C#项目(称为MainProj),它引用了其他几个DLL项目。通过将这些项目添加到MainProj的引用中,它将构建它们并将其生成的DLL复制到MainProj的工作目录中。
MainProj
我想做的是让这些引用的DLL位于MainProj工作目录的子目录中,即MainProj / bin / DLLs,而不是工作目录本身。
我不是一个非常有经验的C#程序员,但是来自C 世界,我假设一种方法是删除项目引用,并通过路径和文件名显式加载所需的DLL(即在C 中LoadLibrary)。但是,如果可以的话,我更愿意做的是设置某种“引用二进制路径”,这样在我构建时它们都将自动复制到该子目录中(然后从那里被引用而无需我需要显式加载每个)。这样的事情可能吗?
LoadLibrary
如果不是,那么在C#中完成我所追求的目标的首选方法是什么(例如,带有Assembly.Load/ Assembly.LoadFile/的Assembly.LoadFrom东西?AppDomain或者也许是System.Environment?)
Assembly.Load
Assembly.LoadFile
Assembly.LoadFrom
AppDomain
System.Environment
从此页面(未经我试用):
在程序初始化的某个位置(在从引用程序集访问任何类之前)执行此操作:
AppDomain.CurrentDomain.AppendPrivatePath(@"bin\DLLs");
编辑: 本文说AppendPrivatePath被认为已过时,但也提供了一种解决方法。
编辑2: 看起来最简单,最简单的方法是在app.config文件中(请参阅此处):
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="bin\DLLs" /> </assemblyBinding> </runtime> </configuration>