private static string ReplaceToken(this NuGet.IPropertyProvider propertyProvider, Match match, bool throwIfNotFound)
        {
            string propertyName = match.Groups["propertyName"].Value;
            var    value        = propertyProvider.GetPropertyValue(propertyName);

            if (value == null && throwIfNotFound)
            {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "The replacement token '{0}' has no value.", propertyName));
            }
            return(value);
        }
 /// <summary>
 /// Replaces tokens in parameter text
 /// </summary>
 /// <param name="text">
 /// Text with tokens to replace
 /// </param>
 /// <param name="throwIfNotFound">
 /// Whether to throw if token not found
 /// </param>
 /// <returns>
 /// Text with replaced tokens
 /// </returns>
 public static Stream Process(this NuGet.IPropertyProvider propertyProvider, Stream stream, bool throwIfNotFound = true) =>
 _tokenRegex.Replace(stream.ReadToEnd(), match => ReplaceToken(propertyProvider, match, throwIfNotFound)).AsStream();
 /// <summary>
 /// Replaces tokens in parameter text
 /// </summary>
 /// <param name="text">
 /// Text with tokens to replace
 /// </param>
 /// <param name="throwIfNotFound">
 /// Whether to throw if token not found
 /// </param>
 /// <returns>
 /// Text with replaced tokens
 /// </returns>
 public static string Process(this NuGet.IPropertyProvider propertyProvider, string text, bool throwIfNotFound = true) =>
 _tokenRegex.Replace(text, match => ReplaceToken(propertyProvider, match, throwIfNotFound));