Константа вычисляется статически на этапе компиляции. Константы подставляются в виде литералов в места использования этих констант. Если создать отдельную сборку только для констант, сослаться на эту сборку из основного проекта, собрать проект, то эту сборку можно будет удалить и всё будет работать, так как в основном проекте не будет ссылок на классы этой сборки, все константы будут подставлены в виде литералов. Так же изменение в сборке с константами потребует пересобрать сборку, которая использует константы.
Здесь наглядный пример.
readonly поле - это поле только для чтения, которое можно задать в конструкторе типа, в котором оно определено или в месте объявления поля. Если поле помечено модификатором static, то его значение можно задать только в статическом конструкторе типа, в котором оно определено или в месте объявления поля.