views:

396

answers:

1

I've got a C# project (call it "MainProj") which references several other DLL projects. By adding these projects to MainProj's references, it will build them and copy their resulting DLL's to MainProj's working directory.

What I'd like to do is have these referenced DLL's be located in a subdirectory of MainProj's working directory, i.e. MainProj/bin/DLLs, rather than the working directory itself.

I'm not a very experienced C# programmer, but coming from the C++ world, I'm assuming one approach would be to remove the project references and explicitly load the required DLL's by path and filename (i.e. in C++, LoadLibrary). What I'd prefer to do however, if there's a way, would be to set some sort of "reference binary path", so they'd all be auto-copied to this subdir when I build (and then be referenced from there without me needing to explicitly load each). Is such a thing possible?

If not, what's the preferred method in C# to accomplish what I'm after (i.e. something with Assembly.Load / Assembly.LoadFile / Assembly.LoadFrom? Something in AppDomain perhaps? Or System.Environment?)

Thanks!

+3  A: 

From this page (untested by me):

Somewhere in your program's initialization (before you access any classes from a referenced assembly) do this:

AppDomain.CurrentDomain.AppendPrivatePath(@"bin\DLLs");

Edit: This article says AppendPrivatePath is considered obsolete, but also gives a workaround.

Edit 2: Looks like the easiest and most kosher way to do this is in the app.config file (see here):

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin\DLLs" />
    </assemblyBinding>
  </runtime>
</configuration>
Aaron
Fantastic! EXACTLY what I was looking for...thanks a million :)
Metal450