Por que os redirecionamentos de ligação são necessários? Suponha que você tenha o aplicativo A que faça referência à biblioteca B e também à biblioteca C da versão 1.1.2.5. A biblioteca B, por sua vez, também faz referência à biblioteca C, mas da versão 1.1.1.0. Agora temos um conflito, porque você não pode carregar versões diferentes do mesmo assembly em tempo de execução. Para resolver esse conflito, você pode usar o redirecionamento de ligação, geralmente para a nova versão (mas também pode ser para a antiga). Você faz isso adicionando o seguinte ao arquivo app.config do aplicativo A, na configuration > runtime > assemblyBinding
seção (veja aqui um exemplo de arquivo de configuração completo):
<dependentAssembly>
<assemblyIdentity name="C"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />
</dependentAssembly>
Você também pode especificar um intervalo de versões para mapear:
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />
Agora a biblioteca B, que foi compilada com referência ao C da versão 1.1.1.0, usará o C da versão 1.1.2.5 no tempo de execução. Obviamente, é melhor garantir que a biblioteca C seja compatível com versões anteriores ou isso possa levar a resultados inesperados.
Você pode redirecionar qualquer versão das bibliotecas, não apenas as principais.
oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"