public void SetCustomAttribute(CustomAttributeBuilder customBuilder) { ArgumentNullException.ThrowIfNull(customBuilder); m_typeBuilder.ThrowIfCreated(); ModuleBuilder?module = m_typeBuilder.Module as ModuleBuilder; customBuilder.CreateCustomAttribute(module !, m_fieldTok); }
/// <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); }
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); }
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); } }
/// <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 !); }
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++; } }
[DynamicDependency(nameof(modopts))] // Automatically keeps all previous fields too due to StructLayout internal SignatureHelper(ModuleBuilder?module, SignatureHelperType type) { this.type = type; this.module = module; }