public TValue GetPropertyValue <TValue>(string propertyName)
        {
            try
            {
                return((TValue)target.GetPropertyValue(propertyName).Resolve(false));
            }
            catch (ArgumentException)
            {
                // Note: xUnit.net looks for attribute property values even in cases
                // where they are not initialized via the property such as the
                // Name property of a Trait.  So we eat the exception and try to
                // fall back on the property of the real attribute instance itself.
                object       attrib   = target.Resolve(false);
                PropertyInfo property = attrib.GetType().GetProperty(propertyName);
                if (property == null)
                {
                    throw;
                }

                return((TValue)property.GetValue(attrib, null));
            }
        }