Мы придумали стратегию обратной совместимости, когда между двумя версиями произошли серьезные изменения. Мы загружаем сборки предыдущих версий в текущий домен приложений, десериализуем некоторые данные со старыми типами версий, а затем преобразуем их в их эквивалент в новой версии.
- Есть ли какие-либо подводные камни в этом подходе, о которых я должен знать?
- Что произойдет, если я попытаюсь загрузить тип по отражению, если пропущена его версия сборки, будет ли он всегда загружать последнюю версию типа, если в текущем домене приложений существует две его версии?
Edit:
Вот сценарий вопроса № 2,
Эти две сборки загружаются в одном домене приложений:
MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089
MyAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089
Обе сборки определяют тип MyAssembly.MyType
.
Тогда, если какой-то код использует этот вид отражения:
Type t = Type.GetType("MyAssembly.MyType, MyAssembly, Culture=neutral, PublicKeyToken=b17a5c561934e089");
Будет ли этот вызов определенно возвращать MyAssembly.MyType, MyAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089
?
Полагаю, тот же сценарий произойдет, если я использую BinaryFormatter.AssemblyFormat = FormatterAssemblyStyle.Simple
при десериализации типов, существующих в двух загруженных версиях одной и той же сборки.