// Internal for unit testing internal IEnumerable <ITypeInfo> GetExportedTypes(string assemblyName) { if (string.Equals(_compilation.AssemblyName, assemblyName, StringComparison.Ordinal)) { return(GetExportedTypes(_compilation.Assembly)); } else { foreach (var reference in _compilation.References) { var compilationReference = reference as CompilationReference; if (compilationReference != null && string.Equals( compilationReference.Compilation.AssemblyName, assemblyName, StringComparison.Ordinal)) { return(GetExportedTypes(compilationReference.Compilation.Assembly)); } var assemblySymbol = _compilation.GetAssemblyOrModuleSymbol(reference) as IAssemblySymbol; if (string.Equals( assemblySymbol?.Identity.Name, assemblyName, StringComparison.Ordinal)) { return(GetExportedTypes(assemblySymbol)); } } } throw new InvalidOperationException( Resources.FormatCodeAnalysis_UnableToLoadAssemblyReference(assemblyName)); }