At the point that the CLR first
to access the metadata for a type (e.g., when JIT-ing methods that
use the type), it must first locate and load the assembly containing
the type. The process of determining exactly which assembly to load
is called "resolving," and is
performed by the assembly resolver. Once the assembly resolver has
determined which physical file to load, the assembly loader is
responsible for loading it into memory.
The assembly resolver performs a relatively complex set of
operations, controlled by application and machine-level configuration
files. These configuration files can tell the resolver to bind to a
different version of the assembly than specified in the assembly
reference, and can give the resolver hints about where to look for
the physical file the loader should load (either at a URI endpoint,
or in subdirectories under the application directory).
Once the resolver has identified which file to load and has verified
that the name, version, culture, and originator information in the
assembly manifest in the located file matches what the resolver is
expecting, it hands off to the loader, which physically loads and
verifies the file.