What is the difference between a private and shared assembly?
A private assembly is used only by a single application and is stored in that application’s installation folder (or subfolder therein). The name of a private assembly name must be unique within the application that uses it. A shared assembly is used by multiple applications and is typically stored in a global folder known as the Global Assembly Cache (GAC). When building an assembly, a developer must specifically choose to build it as a shared assembly by giving it a cryptographically strong name. For example, the .NET Framework is a collection of shared assemblies.