internal static string ToStringReflectionEmitWithVerification <T>(this T @this) { var target = @this.GetType(); var name = new AssemblyName() { Name = "ToStringWithVerification" }; var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly( name, AssemblyBuilderAccess.RunAndSave); var module = assembly.DefineDynamicModule(name.Name + ".dll"); var fullTypeName = target.Namespace + "." + target.Name; var type = module.DefineType(target.Namespace + "." + target.Name, TypeAttributes.Public); var methodName = "ToString" + target.GetHashCode().ToString(); var method = type.DefineMethod(methodName, MethodAttributes.Static | MethodAttributes.Public, typeof(string), new Type[] { target }); var generator = method.GetILGenerator(); //generator.Emit(OpCodes.Ldstr, fullTypeName); generator.Emit(OpCodes.Ret); var createdType = type.CreateType(); assembly.Save(name.Name + ".dll"); AssemblyVerification.Verify(assembly); var createdMethod = createdType.GetMethod(methodName); return(((Func <T, string>)Delegate.CreateDelegate( typeof(Func <T, string>), createdMethod))(@this)); }
internal Assembly Generate() { var name = new AssemblyName(); name.Name = this.Namespace; name.Version = new Version(1, 0, 0, 0); string fileName = name.Name + ".dll"; var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( name, AssemblyBuilderAccess.RunAndSave); var moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, fileName, false); foreach (var type in this.Types) { var typeBuilder = moduleBuilder.DefineType( this.Namespace + "." + type.Key, TypeAttributes.Class | TypeAttributes.Public, typeof(object)); AssemblyGenerator.GenerateConstructor(typeBuilder); foreach (var method in type.Value) { AssemblyGenerator.GenerateMethod(typeBuilder, method); } typeBuilder.CreateType(); } assemblyBuilder.Save(fileName); AssemblyVerification.Verify(assemblyBuilder); return(assemblyBuilder); }
private static void Save(AssemblyBuilder assembly, ProxyContext context) { if ((context.Access & AssemblyBuilderAccess.Save) == AssemblyBuilderAccess.Save) { assembly.Save(assembly.GetName().Name + ".dll"); if (context.Verify) { AssemblyVerification.Verify(assembly); } } }
protected string CreateAssemblyAndVerify(bool verifyAssembly) { var assembly = this.CreateAssembly(); var assemblyName = assembly.Builder.GetName().Name; assembly.Builder.Save(assemblyName + ".dll"); if (verifyAssembly) { AssemblyVerification.Verify(assembly.Builder); } return(assemblyName); }
/// <summary> /// Verify an assembly with peverify /// </summary> /// <param name="adef">Assembly definition</param> public static void VerifyAssembly(AssemblyDefinition adef) { if (adef != null) { var originalLocation = adef.MainModule.Image.FileName; if (PEVerifyUtility.PEVerifyToolPresent) { // We must create a temporary filename in the same path, so PEVerify can resolve dependencies var tempDirectory = Path.GetDirectoryName(originalLocation) ?? string.Empty; var tempFilename = Path.Combine(tempDirectory, Path.GetRandomFileName()); try { adef.Write(tempFilename); AssemblyVerification.Verify(tempFilename); MessageBox.Show(@"All Classes and Methods Verified."); } catch (VerificationException ex) { using (var form = new VerifierForm()) form.ShowDialog(ex.Errors); } catch (Exception ex) { MessageBox.Show(String.Format("Reflexil is unable to verify this assembly: {0}", ex.Message)); } finally { File.Delete(tempFilename); } } else { MessageBox.Show( @"Warning, PEVerify Utility (peverify.exe) not found. Update your PATH environment variable or install .NET SDK"); } } else { MessageBox.Show(@"Assembly definition is not loaded (not a CLI image?)"); } }
static MethodBaseExtensionsGetCallingConventionsTests() { var name = new AssemblyName(); name.Name = MethodBaseExtensionsGetCallingConventionsTests.AssemblyName; name.Version = new Version(1, 0, 0, 0); var fileName = name.Name + ".dll"; var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( name, AssemblyBuilderAccess.Save); var moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, fileName, false); var typeName = MethodBaseExtensionsGetCallingConventionsTests.GenerateType(name, moduleBuilder); assemblyBuilder.Save(fileName); AssemblyVerification.Verify(assemblyBuilder); MethodBaseExtensionsGetCallingConventionsTests.Type = assemblyBuilder.GetType(typeName); }
static TypeExtensionsTests() { var name = new AssemblyName(); name.Name = TypeExtensionsTests.AssemblyName; name.Version = new Version(1, 0, 0, 0); var fileName = name.Name + ".dll"; var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( name, AssemblyBuilderAccess.Save); var moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, fileName, false); var typePublicName = TypeExtensionsTests.GeneratePublicAbstractSerializableAutoType(name, moduleBuilder); var typeInternalName = TypeExtensionsTests.GenerateInternalSealedAnsiBeforeFieldInitType(name, moduleBuilder); assemblyBuilder.Save(fileName); AssemblyVerification.Verify(assemblyBuilder); TypeExtensionsTests.TypePublicAbstractSerializableAuto = assemblyBuilder.GetType(typePublicName); TypeExtensionsTests.TypeInternalSealedAnsiBeforeFieldInit = assemblyBuilder.GetType(typeInternalName); }