private static bool ShouldIgnoreType(Assembly assembly, Type type)
{
if (type == null)
{
return true;
}
var typeName = type.FullName;
// CTL-653
if (string.IsNullOrEmpty(typeName))
{
// Some types don't have a name (for example, after obfuscation), let's ignore these
return true;
}
// Ignore useless types
if (typeName.Contains("<PrivateImplementationDetails>") ||
typeName.Contains("+<") || // C# compiler generated classes
typeName.Contains("+_Closure") || // VB.NET compiler generated classes
typeName.Contains(".__") || // System.Runtime.CompilerServices.*
typeName.Contains("Interop+") || // System.IO.FileSystem, System.Net.Sockets, etc
typeName.Contains("c__DisplayClass") ||
typeName.Contains("d__") ||
typeName.Contains("f__AnonymousType") ||
typeName.Contains("o__") ||
typeName.Contains("__DynamicallyInvokableAttribute") ||
typeName.Contains("ProcessedByFody") ||
typeName.Contains("FXAssembly") ||
typeName.Contains("ThisAssembly") ||
typeName.Contains("AssemblyRef") ||
typeName.Contains("MS.Internal") ||
typeName.Contains("::") ||
typeName.Contains("\\*") ||
typeName.Contains("_extraBytes_") ||
typeName.Contains("CppImplementationDetails"))
{
return true;
}
// Ignore types that might cause a security exception
if (typeName.Contains("System.Data.Metadata.Edm.") ||
typeName.Contains("System.Data.EntityModel.SchemaObjectModel."))
{
return true;
}
foreach (var evaluator in ShouldIgnoreTypeEvaluators)
{
if (evaluator.Invoke(assembly, type))
{
return true;
}
}
return false;
}
}