示例#1
0
        public void SetCustomAttribute(CustomAttributeBuilder customBuilder)
        {
            ArgumentNullException.ThrowIfNull(customBuilder);

            m_typeBuilder.ThrowIfCreated();

            ModuleBuilder?module = m_typeBuilder.Module as ModuleBuilder;

            customBuilder.CreateCustomAttribute(module !, m_fieldTok);
        }
示例#2
0
        /// <inheritdoc />
        public IActionBuilder SetThingType(Type thingType)
        {
            _thingType = thingType;
            var baseName        = $"{thingType.Name}Actions";
            var assemblyName    = new AssemblyName($"{baseName}Assembly");
            var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);

            _module = assemblyBuilder.DefineDynamicModule($"{baseName}Module");

            return(this);
        }
        // Must be called with _lock held
        private static ModuleBuilder GetProxyModuleBuilder(bool requiresCritical)
        {
            if (transparentProxyModuleBuilder == null)
            {
                // make a new assemblybuilder and modulebuilder
                var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(ProxyAssemblyName, AssemblyBuilderAccess.Run);
                transparentProxyModuleBuilder = assemblyBuilder.DefineDynamicModule("MetadataViewProxiesModule");
            }

            return(transparentProxyModuleBuilder);
        }
示例#4
0
        public void SetCustomAttribute(CustomAttributeBuilder customBuilder)
        {
            if (customBuilder == null)
            {
                throw new ArgumentNullException(nameof(customBuilder));
            }

            m_typeBuilder.ThrowIfCreated();

            ModuleBuilder?module = m_typeBuilder.Module as ModuleBuilder;

            customBuilder.CreateCustomAttribute(module !, m_tkField.Token);
        }
示例#5
0
        private void Init(Module?mod)
        {
            m_signature = new byte[32];
            m_currSig   = 0;
            m_module    = mod as ModuleBuilder;
            m_argCount  = 0;
            m_sigDone   = false;
            m_sizeLoc   = NO_SIZE_IN_SIG;

            if (m_module == null && mod != null)
            {
                throw new ArgumentException(SR.NotSupported_MustBeModuleBuilder);
            }
        }
示例#6
0
        /// <exception cref="ArgumentException">If the named event cannot be found on the given object.</exception>
        public NativeEventListener(object nativeObject, string nativeEventName)
        {
            EventInfo?nativeEvent = nativeObject.GetType().GetTypeInfo().GetEvent(nativeEventName);

            Type?      handlerType  = nativeEvent?.EventHandlerType;
            MethodInfo?invokeMethod = handlerType?.GetMethod("Invoke");

            if (nativeEvent == null || handlerType == null || invokeMethod == null)
            {
                throw new ArgumentException($"Event {nativeObject.GetType().Name}.{nativeEventName} could not be found");
            }

            ParameterInfo[] parameterInfo  = invokeMethod.GetParameters();
            Type[]          parameterTypes = parameterInfo.Select(param => param.ParameterType).ToArray();

            if (!EventProxyStructCache.TryGetValue(parameterTypes, out Type eventProxyStructType))
            {
                if (_moduleBuilder == null)
                {
                    AssemblyName    assemblyName    = new("DynamicTypes");
                    AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
                    _moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
                }

                long        classNumber = Interlocked.Increment(ref _classNameCounter);
                TypeBuilder typeBuilder = _moduleBuilder.DefineType("EventProxyStruct" + classNumber, TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.SequentialLayout |
                                                                    TypeAttributes.AnsiClass | TypeAttributes.Sealed | TypeAttributes.BeforeFieldInit, typeof(ValueType));
                FieldBuilder  actionFieldBuilder  = typeBuilder.DefineField(ActionFieldName, typeof(Action), FieldAttributes.Public);
                MethodBuilder eventHandlerBuilder = typeBuilder.DefineMethod(EventHandlerMethodName, MethodAttributes.Public, invokeMethod.ReturnType, parameterTypes);

                ILGenerator il = eventHandlerBuilder.GetILGenerator();
                il.Emit(OpCodes.Ldarg_0);
                il.Emit(OpCodes.Ldfld, actionFieldBuilder);
                il.Emit(OpCodes.Callvirt, typeof(Action).GetMethod(nameof(Action.Invoke)) !);
                il.Emit(OpCodes.Ret);

                eventProxyStructType = typeBuilder.CreateType();

                EventProxyStructCache[parameterTypes] = eventProxyStructType;
            }

            object eventProxyStruct = Activator.CreateInstance(eventProxyStructType);

            eventProxyStructType.GetField(ActionFieldName).SetValue(eventProxyStruct, (Action)(() => { OnEvent?.Invoke(this, EventArgs.Empty); }));
            MethodInfo eventReceiverMethod = eventProxyStructType.GetMethod(EventHandlerMethodName) !;

            Delegate eventHandlerDelegate = Delegate.CreateDelegate(handlerType, eventProxyStruct, eventReceiverMethod);

            nativeEvent.AddEventHandler(nativeObject, eventHandlerDelegate);
        }
        public ModuleBuilder GetModuleBuilder()
        {
            if (_moduleBuilder == null)
            {
                lock (_lock)
                {
                    if (_moduleBuilder == null)
                    {
                        var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(DynamicAssemblyName,
                                                                                    AssemblyBuilderAccess.Run);
                        _moduleBuilder = assemblyBuilder.DefineDynamicModule("Module");

                        IgnoresAccessChecksToAttributeGenerator.Generate(assemblyBuilder, _moduleBuilder);
                    }
                }
            }

            return(_moduleBuilder);
        }
        private (ModuleBuilder, Dictionary <string, int>) CreateModuleBuilder()
        {
            if (this.moduleBuilder == null)
            {
                var assemblyName = Guid.NewGuid().ToString();
#if PLAT_SUPPORT_COLLECTIBLE_ASSEMBLIES
                var builderAccess = AssemblyBuilderAccess.RunAndCollect;
#else
                // RunAndCollect causes tests to crash on .NET Core 2.0 and .NET Core 2.1. It seems
                // like assemblies are collected while still being in use.
                var builderAccess = AssemblyBuilderAccess.Run;
#endif
                var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(assemblyName), builderAccess);
                this.moduleBuilder     = assemblyBuilder.DefineDynamicModule(assemblyName);
                this.definedProxyTypes = new Dictionary <string, int>();
            }

            return(this.moduleBuilder, this.definedProxyTypes !);
        }
示例#9
0
        public static void Init()
        {
            if (ab == null)
            {
                var aName = new AssemblyName(Process.GetCurrentProcess().ProcessName + "HttpRpcImpl" + id);
                if (aName == null || aName.Name == null)
                    #pragma warning disable CA1303 // Do not pass literals as localized parameters
                {
                    throw new Exception("Can' get current process name!");
                }
                    #pragma warning restore CA1303 // Do not pass literals as localized parameters

                AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(Guid.NewGuid().ToString()),
                                                      AssemblyBuilderAccess.Run);

                ab = AssemblyBuilder.DefineDynamicAssembly(
                    aName, AssemblyBuilderAccess.Run);
                ModuleBuilder = ab.DefineDynamicModule(aName.Name);

                id++;
            }
        }
示例#10
0
 [DynamicDependency(nameof(modopts))]  // Automatically keeps all previous fields too due to StructLayout
 internal SignatureHelper(ModuleBuilder?module, SignatureHelperType type)
 {
     this.type   = type;
     this.module = module;
 }