В общем, если вы пытаетесь использовать конкретную версию сборки, приведенную ниже, на самом деле не относится, вам следует просто использовать нужную версию.
Однако иногда вы можете столкнуться с ситуацией, когда у вас есть это:
AssemblyX - ссылка на версию 1.2.1 AssemblyZ
AssemblyY - ссылка на версию 1.2.2 AssemblyZ
Но вашему проекту нужны оба AssemblyX и AssemblyY.
Так как вы решаете это? Вы можете поместить 1.2.1 и 1.2.2 AssemblyZ в GAC, или, если вы уверены, что нет проблем с совместимостью, вы можете использовать привязку сборки. Вот пример (это идет в вашем файле Web.config
или App.config
):
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
В сущности, это говорит о том, что если какие-либо сборки в вашем решении ссылаются на 1.0.0.0 myAssembly, то они действительно должны использовать версию 2.0.0.0. Ожидается, что в пути будет версия 2.0.0.0.
Хак, который вы можете использовать, когда всегда хотите, чтобы они использовали определенную версию сборки, - это указать диапазон версий, например:
<dependentAssembly>
<assemblyIdentity name="MyAssembly" publicKeyToken="B7567367622062C6" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="1.2.1.0" />
</dependentAssembly>
Это заставит использовать версию MyAssembly 1.2.1.0 для любой ссылки на версию MyAssembly в диапазоне от 0.0.0.0 до 3.0.0.0.