C# – Dependent DLL is not getting copied to the build output folder in Visual Studio

cdllnetreferencevisual studio 2010

I have a visual studio solution.
I have many projects in the solution.
There is one main project which acts as the start up and uses other projects.
There is one project say "ProjectX". Its reference is added to main project.
The ProjectX references another .NET dll (say abc.dll) that isn't part of the solution.

Now this abc.dll should be copied to bin/debug folder of main project, but it isn't getting copied there. Why is it not getting copied, any known reasons ?

Best Answer

I found that if ProjectX referenced the abc.dll but didn't directly use any of the types DEFINED in abc.dll, then abc.dll would NOT be copied to the main output folder. (It would be copied to the ProjectX output folder, to make it extra-confusing.)

So, if you're not explicitly using any of the types from abc.dll anywhere in ProjectX, then put a dummy declaration somewhere in one of the files in ProjectX.

AbcDll.AnyClass dummy006; // this will be enough to cause the DLL to be copied

You don't need to do this for every class -- just once will be enough to make the DLL copy and everything work as expected.

Addendum: Note that this may work for debug mode, but NOT for release. See @nvirth's answer for details.