/// <summary>
        /// This extension method will compute the fully-qualified assembly name given the extension-name, resource-name and the
        /// containing-classes
        /// </summary>
        /// <param name="extensionName"></param>
        /// <param name="resourceName"></param>
        /// <param name="containingClassName"></param>
        /// <returns>fully-qualified assembly name</returns>
        public static string GetExtensionResourceClassAssemblyQualifiedName(
            string extensionName,
            string resourceName,
            string containingClassName)
        {
            if (string.IsNullOrEmpty(extensionName))
            {
                throw new ArgumentNullException(nameof(extensionName));
            }

            string extensionAssemblyName = GetExtensionAssemblyName(extensionName);

            string @namespace = EdFiConventions.CreateResourceNamespace(
                EdFiConventions.ProperCaseName,
                resourceName,
                null,
                null,
                null,
                extensionName);

            string extensionResourceClassTypeName = $"{@namespace}.{GetExtensionClassName(containingClassName)}";

            return($"{extensionResourceClassTypeName}, {extensionAssemblyName}");
        }
        public static string GetExtensionClassAssemblyQualifiedName(Type edFiStandardType, string extensionName)
        {
            string @namespace;
            string extensionClassTypeName;
            string extensionAssemblyName;

            if (edFiStandardType.IsEdFiEntity())
            {
                string aggregateName = ParseAggregateNameFromEntityType(edFiStandardType);

                // As of this implementation:
                //   Entity:            EdFi.Ods.Entities.NHibernate.StudentAggregate.EdFi.{className}
                //   Extension Entity:  EdFi.Ods.Entities.NHibernate.StudentAggregate.Sample.{extensionClassName}
                @namespace = Namespaces.Entities.NHibernate.AggregateNamespaceForEntity(
                    Namespaces.Entities.NHibernate.BaseNamespace,
                    aggregateName,
                    extensionName);

                extensionClassTypeName = $"{@namespace}.{GetExtensionClassName(edFiStandardType.Name)}";

                extensionAssemblyName = GetExtensionAssemblyName(extensionName);
            }
            else
            {
                //If standard type exists in profile assembly, use edFiStandardType assembly name.
                //Otherwise, use extension conventions to determine assembly name.
                bool isProfileAssembly = EdFiConventions.IsProfileAssembly(edFiStandardType.Assembly);

                extensionAssemblyName = isProfileAssembly
                    ? edFiStandardType.Assembly.GetName()
                                        .Name
                    : GetExtensionAssemblyName(extensionName);

                var profileName = string.Empty;

                if (isProfileAssembly)
                {
                    //In This case we are within a profile context
                    //the profile name is on the end of the assembly name
                    if (!string.IsNullOrWhiteSpace(edFiStandardType.Namespace))
                    {
                        profileName = edFiStandardType.Namespace.Split('.')
                                      .Last();
                    }
                }

                var aggregateName = ParseAggregateNameFromResourceType(edFiStandardType);

                @namespace = EdFiConventions.CreateResourceNamespace(
                    EdFiConventions.ProperCaseName,
                    aggregateName,
                    profileName,
                    null,
                    null,
                    extensionName);

                extensionClassTypeName = $"{@namespace}.{GetExtensionClassName(edFiStandardType.Name)}";

                // Verify that suffix was trimmed, if not then provided type doesn't follow expected convention
                if (@namespace == edFiStandardType.Namespace)
                {
                    throw new Exception(
                              $"The namespace of the supplied Ed-Fi standard type '{edFiStandardType.FullName}' does not follow expected conventions.");
                }
            }

            return($"{extensionClassTypeName}, {extensionAssemblyName}");
        }