Assembly Loading Incompatibilidade de Versão: Por que está carregando?

Tenho dois assemblies: HelloWorld.exe e Hello.dll. O exe é o assembly principal e a dll está sendo usada pelo assembly principa

Compilei o HelloWorld.exe (1.0.0) e o Hello.dll (1.0.0). Coloquei as montagens em uma pasta diferent

Alterei a versão do Hello.dll para 2.0.0 e continuei substituindo o Hello.dll 1.0.0 pela versão 2.0.0. Em seguida, inicio o HelloWorld.exe e funcionou be

Eu esperava que ele travasse e queimasse imediatamente porque o Hello.dll mencionado quando eu compilei o EXE era 1.0.0. Agora, a DLL 1.0.0 foi substituída pela 2.0.0, mas ainda funcionav

Conforme MSDN:

Por padrão, uma montagem usará apenas tipos da mesma montagem (nome e número da versão) com a qual foi criada e testada. Ou seja, se você tiver um assembly que use um tipo da versão 1.0.0.2 de outro assembly, ele (por padrão) não usará o mesmo tipo da versão 1.0.0.4 do outro assembly. Esse uso do nome e da versão para identificar assemblies referenciados ajuda a evitar o problema "DLL Hell" de atualizações para um aplicativo que quebra outros aplicativo

Questões

Por que funcionou?Como fazê-lo NÃO funcionar?BONUS PERGUNTA: O que acontece durante o processo de compilação? A versão das dependências externas não está codificada para a dependência principal?

Observe que Hello.dll não tem um nome fort

Aqui está o manifesto do HelloWorld.exe:

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern Hello
{
  .ver 2:0:0:0
}
.assembly HelloWorld
{
...//snipped
}

Aqui está o log de associação do assembly, obtido no Fuslogvw.exe (visualizador de log de associação do assembly):

=== Pre-bind state information ===
LOG: User = ian.uy
LOG: DisplayName = Hello, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Users/ian.uy/Desktop/HelloWorld/HelloWorld/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/ian.uy/Desktop/HelloWorld/HelloWorld/bin/Debug/Hello.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Users\ian.uy\Desktop\HelloWorld\HelloWorld\bin\Debug\Hello.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Hello, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
LOG: Binding succeeds. Returns assembly from C:\Users\ian.uy\Desktop\HelloWorld\HelloWorld\bin\Debug\Hello.dll.
LOG: Assembly is loaded in default load context.

questionAnswers(3)

yourAnswerToTheQuestion