The most common scenario that I'm aware of is to create a plug-in architecture for your app. You define an interface that all plug-ins must implement, then developers will build libraries that implement it. At run time your app will browse its plug-in folder and load any assemblies it finds. It will use reflection to determine whether they implement your plug-in interface and, if they do, it will consider them as part of the application.