What is the difference between a private assembly and a shared assembly?
A private assembly is normally used by a single application, and is stored in the application's directory, or a sub-directory beneath.
A shared assembly is intended to be used by multiple applications, and is normally stored in the global assembly cache (GAC), which is a central repository for assemblies.
A shared assembly can also be stored outside the GAC, in which case each application must be pointed to its location via a codebase entry in the application's configuration file. The main advantage of deploying assemblies to the GAC is that the GAC can support multiple versions of the same assembly side-by-side.