A complete AssemblyRef includes the textual name of the assembly, the version, the culture and the Originator (if the assembly has a shared name). Strictly speaking, only the text name of the assembly is absolutely required to do a bind. If not all parameters are specified, the AssemblyResolver will attempt to resolve the bind based on first match.
Partial references are often convenient to use in source code, but they do introduce some variability into the binding process. For example, if you issue a bind to a shared named assembly but don’t include the originator in your reference, you have no assurance that the assembly you get back came from the publisher you expect. Also, references that do not include the Originator are not subject to version policy, so the application and administrator config files are never checked. To be absolutely sure you’re getting what you want, include all of the parameters when referencing an assembly.
Given a partial reference, the AssemblyResolver will start by probing as it always does. The first assembly it finds that matches the criteria will satisfy the bind. For example, consider the scenario where there are two assemblies in the global assembly cache whose identities differ only by originator. If the desired originator is not specified on the bind, the AssemblyResolver will return whichever assembly it happens upon first.