Frage

Ich habe Code geerbt, der DynamicMethod verwendet, um Methoden zur Laufzeit zu generieren. Ich muss auch einen Teil des Codes ändern, der generiert wird.

Da ich bei MSIL ein N00B bin, würde ich gerne den generierten Code im Reflektor laden und sicherstellen, dass der Code das tut, was ich bete, dass er es tut;)

Nur ich kann nicht herausfinden, wie man die "anonym gehostete DynamicMethods -Assemblierung" auf die Festplatte serialisieren kann. Ist das möglich? Wenn das so ist, wie?

War es hilfreich?

Lösung

Ich denke, wenn Sie die Methode in Reflektor oder Dotpeek laden möchten, müssen Sie eine tatsächliche Baugruppe erstellen. Um dies zu tun, verwenden MethodBuilder Anstatt von DynamicMethod. Der größte Teil der Verwendung von ihnen sollte gleich sein.

Andere Tipps

Versuche dies,

  var assemblyName = new AssemblyName("SomeName");
  var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave, @"c:");
  var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name +  ".dll");

  TypeBuilder builder = moduleBuilder.DefineType("Test", TypeAttributes.Public);
  var methodBuilder = builder.DefineMethod("DynamicCreate", MethodAttributes.Public, typeof(T), new[] { typeof(IDataRecord) }); 
  /* this line is a replacement for your  new DynamicMethod(....)  line of code

  /* GENERATE YOUR IL CODE HERE */

  var t = builder.CreateType();
  assemblyBuilder.Save(assemblyName.Name + ".dll");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top