Скажем, у меня есть сборки в GAC с версиями 1.1.1.5, 1.1.5.1, 1.1.6.2, 1.2.1.1 и 2.1.2.1. В моем приложении есть ссылка версии 1.1.3.0. Какая сборка будет соответствовать во время выполнения? и каковы фактические правила для соответствия сборки?
Как точно соответствует соответствие версии сборки?
Ответ 1
Если ваша ссылка требует определенной версии, по умолчанию она не будет загружаться при сборке, так как эта версия не существует.
Это можно настроить, однако, через Перенаправление привязки сборок. Существуют различные варианты того, что произойдет здесь, в том числе:
- Ссылка может сказать, что он не заботится об управлении версиями, и в этом случае загружается самая новая.
- Вы можете настроить приложение таким образом, чтобы указать, как перенаправить привязку.
- Сборка в GAC может быть с политикой издателя, которая указывает, как с этим справиться.
Ответ 2
Какая сборка будет сопоставлена во время выполнения?
Ничего не будет найдено, ваша программа будет бомбить.
Документация для класса версии говорит в основном о том, как вы выбираете номера версий. И да, вы обычно считаете, что изменение в номере сборки является неотъемлемым изменением. И изменение в пересмотре должно быть низким риском. Что вы считаете, когда вы выбираете [AssemblyFileVersion].
Однако политика CLR по умолчанию не реализует такую интерпретацию [AssemblyVersion], она настаивает на точной. Он рад, когда находит ту же самую DLL, с которой вы скомпилировали свою программу. Это, как правило, трудно обеспечить. Вы можете переопределить эту политику и сделать ее более слабой, хотя вы всегда должны дважды об этом подумать. Существует очень долгая история хорошо продуманных незначительных изменений в исходном коде, которые на практике не оправдались. То, что Microsoft слишком хорошо знает, нужно поддерживать код, который длится десятилетиями. Контрмеры по умолчанию против DLL Hell в CLR сложны, как камень. Как и должно быть. Растрескивание до вас.