The Common Language Runtime (CLR) differentiates an assembly
from a satellite assembly by an attribute called the "AssemblyCultureAttribute".
A regular assembly contains code and the neutral culture's resources. A
satellite assembly contains only resources for a particular culture, as in
[assembly: AssemblyCultureAttribute ("en-US")]. Putting this
attribute on an assembly and using something other than the empty string
("") for the culture name will make this assembly a satellite
assembly rather than a regular assembly that contains executable code. Labeling
a traditional code library with this attribute will break it, because no other
code will be able to find the library's entry points at runtime. We have a
culture attribute in the Global Assembly Cache (GAC). If we open it and see, we
find that it does not have a value for a normal assembly and has the culture
name shown for the satellite assembly. This can be stated as the vital
difference between an assembly and a satellite assembly.