Add guard to PropertyInfo.SetValue to provide a more useful exception when there is no setter