My WinForms 2.0 application has 2 assemblies. 1st assembly handles GUI and project specific code, and 2nd assembly is where I put all my reusable code. Both projects are part of
I usually build the project and put the log4net dll in a libs folder which is a solution folder. Both projects reference this dll (libs folder).
Learn to rely on NuGet, it will automatically manage your dependencies and store them in proper folder.
As for log4net, the compatibility has already been broken because of messed keys and broken method contracts. No one knows how to resolve this mess:
http://netpl.blogspot.com/2012/03/pathetic-breaking-change-between.html
should I copy the log4net.dll file into each project directory?
No. Keep it at separate dependencies folder. This folder should be common for all projects in Solution. You should reference log4net.dll into each project (that require this component).
Or should I also add the entire log4net source code project as part of the solution, so that I am insulated from any future changes in log4net breaking my existing application?
It is not required. It is required only if you are facing any issues in log4net.dll and want to diagnose yourself.