public override async Task <string?> OnSetPropertyValueAsync(
            string unevaluatedPropertyValue,
            IProjectProperties defaultProperties,
            IReadOnlyDictionary <string, string>?dimensionalConditions = null)
        {
            // Don't set the new value if both of the following is true:
            //  1. There is no existing property entry AND
            //  2. The new value is identical to the default value.

            IEnumerable <string> propertyNames = await defaultProperties.GetPropertyNamesAsync();

            if (!propertyNames.Contains(PropertyName))
            {
                if (Version.TryParse(unevaluatedPropertyValue, out Version version))
                {
                    Version defaultVersion = await GetDefaultVersionAsync(defaultProperties);

                    if (version.Equals(defaultVersion))
                    {
                        return(null);
                    }
                }
            }

            return(await base.OnSetPropertyValueAsync(unevaluatedPropertyValue, defaultProperties, dimensionalConditions));
        }
 public virtual Task <IEnumerable <string> > GetPropertyNamesAsync()
 => DelegatedProperties.GetPropertyNamesAsync();