Duplicate – this exact question was asked here – the only solution seems to be post build event.
In Visual studio 2008, I have the following projects:
-
A – references B
-
B – references Lib.dll
When B is built, Lib.dll appears in B/bin/Debug. (this is ok)
When A is built, B.dll appears in A/bin/Debug, but Lib.dll does NOT appear in A/bin/Debug.
Wouldn’t it be logical behavior to copy also all B’s dependencies to output path of A, since B will need these assemblies at run-time?
All references have copylocal = true.
(Now I have to reference all B’s dependencies from A by hand, is that correct? I could also use a custom build step I guess. Anyway, does this behavior have any advantages/sense?)
This only works if the assembly is actually referenced by the .dll. i.e. If you have LibInterface.dll and LibImplementation.dll – and your code in A only references the classes in LibInterface.dll, there is no way to get LibImplentation.dll into the output for B (cleanly).
This also applies for any arbitary files – i.e. if you have Randon.myFile that is related to project A, this would be the desired procedure:
1. Add as copy local, or build event to project A (so turns up in output for project A)
2. In Project B, set “copy local” on project A ref.
3. You should then get everything in the output of project A in project B (including your file) – but you don’t.
There could be some other option – “Copy Local – all” or something. This would help VS support IOC techniques, and clean abstractions.