/// <summary>
 /// Gets the custom attributes of the specified type <typeparamref name="T"/> applied to the specified <paramref name="assembly"/>.
 /// </summary>
 /// <typeparam name="T">The type of the custom attributes to retrieve.</typeparam>
 /// <param name="provider">The reflection provider.</param>
 /// <param name="assembly">The assembly to get custom attributes from.</param>
 /// <returns>A read-only list of custom attribute instances.</returns>
 public static IReadOnlyList <T> GetCustomAttributes <T>(this IAssemblyIntrospectionProvider provider, Assembly assembly) where T : Attribute
 => (IReadOnlyList <T>)NotNull(provider).GetCustomAttributes(assembly, typeof(T), inherit : true);
 /// <summary>
 /// Determines whether the custom attribute of the specified <paramref name="attributeType"/> type or its derived types is applied to the specified <paramref name="assembly"/>.
 /// </summary>
 /// <param name="provider">The reflection provider.</param>
 /// <param name="assembly">The assembly to check the custom attribute on.</param>
 /// <param name="attributeType">The type of attribute to search for.</param>
 /// <returns>true if one or more instances of <paramref name="attributeType" /> or its derived types are applied to the specified <paramref name="assembly"/>; otherwise, false.</returns>
 public static bool IsDefined(this IAssemblyIntrospectionProvider provider, Assembly assembly, Type attributeType)
 => NotNull(provider).IsDefined(assembly, attributeType, inherit: true);
 /// <summary>
 /// Gets all the custom attributes for the specified <paramref name="assembly"/> as specified by type.
 /// </summary>
 /// <param name="provider">The reflection provider.</param>
 /// <param name="assembly">The assembly to get custom attributes for.</param>
 /// <param name="attributeType">The type for which the custom attributes are to be returned. </param>
 /// <returns>An array that contains the custom attributes for the specified <paramref name="assembly"/>.</returns>
 public static IReadOnlyList <Attribute> GetCustomAttributes(this IAssemblyIntrospectionProvider provider, Assembly assembly, Type attributeType)
 => (IReadOnlyList <Attribute>)NotNull(provider).GetCustomAttributes(assembly, attributeType, inherit: true);
 /// <summary>
 /// Gets the single custom attribute of the specified type <typeparamref name="T"/> applied to the specified <paramref name="assembly"/>.
 /// </summary>
 /// <typeparam name="T">The type of the custom attribute to retrieve.</typeparam>
 /// <param name="provider">The reflection provider.</param>
 /// <param name="assembly">The assembly to get the custom attribute from.</param>
 /// <returns>The single applied custom attribute instance, or null if no such attribute was found.</returns>
 public static T GetCustomAttribute <T>(this IAssemblyIntrospectionProvider provider, Assembly assembly) where T : Attribute
 => Single(NotNull(provider).GetCustomAttributes <T>(assembly));
 /// <summary>
 /// Gets the single custom attribute of the specified type applied to the specified <paramref name="assembly"/>.
 /// </summary>
 /// <param name="provider">The reflection provider.</param>
 /// <param name="assembly">The assembly to get the custom attribute from.</param>
 /// <param name="attributeType">The type for which the custom attribute is to be returned. </param>
 /// <returns>The single applied custom attribute instance, or null if no such attribute was found.</returns>
 public static Attribute GetCustomAttribute(this IAssemblyIntrospectionProvider provider, Assembly assembly, Type attributeType)
 => Single(GetCustomAttributes(provider, assembly, attributeType));
 /// <summary>
 /// Gets the <see cref="Type" /> object with the specified name in the specified <paramref name="assembly"/> and optionally throws an exception if the type is not found.
 /// </summary>
 /// <param name="provider">The reflection introspection provider.</param>
 /// <param name="assembly">The assembly to get the type from.</param>
 /// <param name="name">The full name of the type. </param>
 /// <param name="throwOnError">true to throw an exception if the type is not found; false to return null. </param>
 /// <returns>An object that represents the specified class.</returns>
 public static Type GetType(this IAssemblyIntrospectionProvider provider, Assembly assembly, string name, bool throwOnError) => NotNull(provider).GetType(assembly, name, throwOnError, ignoreCase: false);
 /// <summary>
 /// Gets an <see cref="AssemblyName" /> for the specified <paramref name="assembly"/>.
 /// </summary>
 /// <param name="provider">The reflection introspection provider.</param>
 /// <param name="assembly">The assembly to get the name for.</param>
 /// <returns>An object that contains the fully parsed display name for this assembly.</returns>
 public static AssemblyName GetName(this IAssemblyIntrospectionProvider provider, Assembly assembly) => NotNull(provider).GetName(assembly, copiedName: false);
 /// <summary>
 /// Gets all the modules that are part of the specified <paramref name="assembly"/>.
 /// </summary>
 /// <param name="provider">The reflection introspection provider.</param>
 /// <param name="assembly">The assembly to get the modules for.</param>
 /// <returns>An array of modules.</returns>
 public static IReadOnlyList <Module> GetModules(this IAssemblyIntrospectionProvider provider, Assembly assembly) => NotNull(provider).GetModules(assembly, getResourceModules: false);