public virtual Type TryTypeForwardResolution(MetadataOnlyAssembly assembly, string fullname, bool ignoreCase) { Type type; using (IEnumerator <UnresolvedTypeName> enumerator = PseudoCustomAttributes.GetRawTypeForwardedToAttributes(assembly).GetEnumerator()) { while (enumerator.MoveNext()) { UnresolvedTypeName current = enumerator.Current; if (!Utility.Compare(current.TypeName, fullname, ignoreCase)) { continue; } type = current.ConvertToType(assembly.TypeUniverse, assembly.ManifestModuleInternal); return(type); } return(null); } return(type); }
public static IEnumerable <CustomAttributeData> GetTypeForwardedToAttributes(MetadataOnlyModule manifestModule) { ITypeUniverse assemblyResolver = manifestModule.AssemblyResolver; Type builtInType = assemblyResolver.GetBuiltInType(System.Reflection.Adds.CorElementType.Type); Assembly assembly = assemblyResolver.GetSystemAssembly(); Type type = assembly.GetType("System.Runtime.CompilerServices.TypeForwardedToAttribute", false, false); if (type != null) { foreach (UnresolvedTypeName rawTypeForwardedToAttribute in PseudoCustomAttributes.GetRawTypeForwardedToAttributes(manifestModule)) { ConstructorInfo[] constructorInfoArray = type.GetConstructors(); Type type1 = rawTypeForwardedToAttribute.ConvertToType(assemblyResolver, manifestModule); List <CustomAttributeTypedArgument> customAttributeTypedArguments = new List <CustomAttributeTypedArgument>(1) { new CustomAttributeTypedArgument(builtInType, type1) }; List <CustomAttributeNamedArgument> customAttributeNamedArguments = new List <CustomAttributeNamedArgument>(0); yield return(new MetadataOnlyCustomAttributeData(constructorInfoArray[0], customAttributeTypedArguments, customAttributeNamedArguments)); } } }
internal static IEnumerable <UnresolvedTypeName> GetRawTypeForwardedToAttributes(MetadataOnlyAssembly assembly) { return(PseudoCustomAttributes.GetRawTypeForwardedToAttributes(assembly.ManifestModuleInternal)); }