The CLR - Common Language Runtime - is responsible for the process of locating and binding referenced assemblies. Locating is the process of finding the correct assembly in the hard disk. Binding is the process of loading the assembly in the application address space.
The CLR searches for referenced assemblies using the name and version in order.
If there are multiple Publisher Policy assembly versions inside the GAC, CLR will pick the Publisher Policy, which has the highest version number.
For example,
policy.1.0.Teradata.Client.Provider.dll, version 1.0.0.0 and
policy.1.0.Teradata.Client.Provider.dll, version 2.0.0.0.
Since the second one has highest version number, it will pick up the second Publisher Policy File and bind it, in this case the Publisher Policy determines the correct version.
How the Runtime Locates Assemblies