System.RuntimeMethodHandle.CheckLinktimeDemands C# (CSharp) Method

CheckLinktimeDemands() private method

private CheckLinktimeDemands ( Module module, int metadataToken ) : void
module System.Reflection.Module
metadataToken int
return void
        internal void CheckLinktimeDemands(Module module, int metadataToken)
        {
            _CheckLinktimeDemands((void*)module.ModuleHandle.Value, metadataToken);
        }

Usage Example

示例#1
0
 internal static unsafe object[] GetCustomAttributes(Module decoratedModule, int decoratedMetadataToken, int pcaCount, RuntimeType attributeFilterType, bool mustBeInheritable, IList derivedAttributes)
 {
     if (decoratedModule.Assembly.ReflectionOnly)
     {
         throw new InvalidOperationException(Environment.GetResourceString("Arg_ReflectionOnlyCA"));
     }
     MetadataImport metadataImport = decoratedModule.MetadataImport;
     CustomAttributeRecord[] customAttributeRecords = CustomAttributeData.GetCustomAttributeRecords(decoratedModule, decoratedMetadataToken);
     Type elementType = (((attributeFilterType == null) || attributeFilterType.IsValueType) || attributeFilterType.ContainsGenericParameters) ? typeof(object) : attributeFilterType;
     if ((attributeFilterType == null) && (customAttributeRecords.Length == 0))
     {
         return (Array.CreateInstance(elementType, 0) as object[]);
     }
     object[] attributes = Array.CreateInstance(elementType, customAttributeRecords.Length) as object[];
     int length = 0;
     SecurityContextFrame frame = new SecurityContextFrame();
     frame.Push(decoratedModule.Assembly.InternalAssembly);
     Assembly lastAptcaOkAssembly = null;
     for (int i = 0; i < customAttributeRecords.Length; i++)
     {
         bool flag2;
         bool flag3;
         object obj2 = null;
         CustomAttributeRecord caRecord = customAttributeRecords[i];
         RuntimeMethodHandle ctor = new RuntimeMethodHandle();
         RuntimeType attributeType = null;
         int namedArgs = 0;
         IntPtr signature = caRecord.blob.Signature;
         IntPtr blobEnd = (IntPtr) (((void*) signature) + caRecord.blob.Length);
         if (FilterCustomAttributeRecord(caRecord, metadataImport, ref lastAptcaOkAssembly, decoratedModule, decoratedMetadataToken, attributeFilterType, mustBeInheritable, attributes, derivedAttributes, out attributeType, out ctor, out flag2, out flag3))
         {
             if (!ctor.IsNullHandle())
             {
                 ctor.CheckLinktimeDemands(decoratedModule, decoratedMetadataToken);
             }
             RuntimeConstructorInfo.CheckCanCreateInstance(attributeType, flag3);
             if (flag2)
             {
                 obj2 = CreateCaObject(decoratedModule, ctor, ref signature, blobEnd, out namedArgs);
             }
             else
             {
                 obj2 = attributeType.TypeHandle.CreateCaInstance(ctor);
                 if (Marshal.ReadInt16(signature) != 1)
                 {
                     throw new CustomAttributeFormatException();
                 }
                 signature = (IntPtr) (((void*) signature) + 2);
                 namedArgs = Marshal.ReadInt16(signature);
                 signature = (IntPtr) (((void*) signature) + 2);
             }
             for (int j = 0; j < namedArgs; j++)
             {
                 string str;
                 bool flag4;
                 Type type3;
                 object obj3;
                 IntPtr ptr1 = caRecord.blob.Signature;
                 GetPropertyOrFieldData(decoratedModule, ref signature, blobEnd, out str, out flag4, out type3, out obj3);
                 try
                 {
                     if (flag4)
                     {
                         if ((type3 == null) && (obj3 != null))
                         {
                             type3 = (obj3.GetType() == typeof(RuntimeType)) ? typeof(Type) : obj3.GetType();
                         }
                         RuntimePropertyInfo property = null;
                         if (type3 == null)
                         {
                             property = attributeType.GetProperty(str) as RuntimePropertyInfo;
                         }
                         else
                         {
                             property = attributeType.GetProperty(str, type3, Type.EmptyTypes) as RuntimePropertyInfo;
                         }
                         RuntimeMethodInfo setMethod = property.GetSetMethod(true) as RuntimeMethodInfo;
                         if (setMethod.IsPublic)
                         {
                             setMethod.MethodHandle.CheckLinktimeDemands(decoratedModule, decoratedMetadataToken);
                             setMethod.Invoke(obj2, BindingFlags.Default, null, new object[] { obj3 }, null, true);
                         }
                     }
                     else
                     {
                         (attributeType.GetField(str) as RtFieldInfo).InternalSetValue(obj2, obj3, BindingFlags.Default, Type.DefaultBinder, null, false);
                     }
                 }
                 catch (Exception exception)
                 {
                     throw new CustomAttributeFormatException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString(flag4 ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), new object[] { str }), exception);
                 }
             }
             if (!signature.Equals(blobEnd))
             {
                 throw new CustomAttributeFormatException();
             }
             attributes[length++] = obj2;
         }
     }
     frame.Pop();
     if ((length == customAttributeRecords.Length) && (pcaCount == 0))
     {
         return attributes;
     }
     if (length == 0)
     {
         Array.CreateInstance(elementType, 0);
     }
     object[] destinationArray = Array.CreateInstance(elementType, (int) (length + pcaCount)) as object[];
     Array.Copy(attributes, 0, destinationArray, 0, length);
     return destinationArray;
 }
All Usage Examples Of System.RuntimeMethodHandle::CheckLinktimeDemands