In my opinion, you should always use auto-properties instead of public fields. That said, here's a compromise:
Start off with an internal field using the naming convention you'd use for a property. When you first either
- need access to the field from outside its assembly, or
- need to attach logic to a getter/setter
Do this:
- rename the field
- make it private
- add a public property
Your client code won't need to change.
Someday, though, your system will grow and you'll decompose it into separate assemblies and multiple solutions. When that happens, any exposed fields will come back to haunt you because, as Jeff mentioned, changing a public field to a public property is a breaking API change.