Это поможет вам вытащить себя из действительно глубокой ямы, вырытой версионностью. Скажем, ваша первая версия вашей программы использует этот класс
using System;
namespace Acme.Financial.Banking {
[Serializable]
public class BankAccount {
public double Balance { get; set; }
//...
}
}
И с ним вы сериализовали множество записей банковских счетов. А бухгалтер начинает жаловаться на то, что на балансе нет ни одной миллиардной копейки, поэтому вы меняете класс:
public decimal Balance { get; set; }
Проблема решена, у следующего клиента счастливые балансы. Пока вас не попросят обновить существующего клиента множеством сериализованных записей в старом формате. Большая проблема, вы не можете десериализовать записи больше, так как класс изменился.
extern alias решает вашу проблему, вы можете ссылаться как на старую версию, так и на новую версию класса в вашем коде, даже если имена пространств имен и классов совпадают.