private void SetPropertyValueByName(string propertyName, object propertyValue)
{
if (Properties == null || _PropertyValues == null || Properties.Count == 0)
throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName));
SettingsProperty pp = Properties[propertyName];
if (pp == null)
throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName));
if (pp.IsReadOnly)
throw new SettingsPropertyIsReadOnlyException(SR.GetString(SR.SettingsPropertyReadOnly, propertyName));
if (propertyValue != null && !pp.PropertyType.IsInstanceOfType(propertyValue))
throw new SettingsPropertyWrongTypeException(SR.GetString(SR.SettingsPropertyWrongType, propertyName));
SettingsPropertyValue p = _PropertyValues[propertyName];
if (p == null)
{
GetPropertiesFromProvider(pp.Provider);
p = _PropertyValues[propertyName];
if (p == null)
throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName));
}
p.PropertyValue = propertyValue;
}