One of the reasons why public fields are evil is that if 100 other assemblies are compiled against that field, and later you decide to replace it with a public property (to include validation, etc), all those assemblies will have to be recompiled as well.
So, it really doesn't matter whether the field is readonly or not - public fields are still evil.