Ответ 1
GetHashCode
реализация IPAddress
для IPv6:
if (m_HashCode == 0)
{
m_HashCode = StringComparer.InvariantCultureIgnoreCase.GetHashCode(ToString());
return m_HashCode;
}
Чтобы избежать повторного вычисления хэш-кода снова и снова, они сохраняют результат в частном члене. Этот частный член затем сериализуется на удаленном сервере.
Дело в том, что StringComparer.InvariantCultureIgnoreCase.GetHashCode(ToString())
возвращает разные результаты в разных версиях ОС, и поскольку m_HashCode
также сериализуется, сервер не пересчитывает его.
Это приводит к двум идентичным экземплярам IPAddress
с разными результатами GetHashCode
.
Я думаю, что частный член m_HashCode
должен быть помечен как [NonSerialized]
, который заставит GetHashCode
повторно генерировать хеш-код локально и правильно.
В качестве обходного пути я вмешался в процесс сериализации и сериализовался как byte[]
.
Здесь ошибка подключения VisualStudio. Эта ссылка мертва, поскольку ошибка была закрыта по следующим причинам:
"Благодарим вас за сообщение об этой проблеме. К сожалению, наша команда не может решить эту проблему из-за других элементов с более высоким приоритетом. Кроме того, любые изменения в сериализованном контенте типа приводят к риску взлома приложений, которые зависеть от этого поведения".