Question

I ont hérité de code qui utilise DynamicMethod pour générer des méthodes à l'exécution. Je dois aussi de modifier une partie du code qui est généré.

Depuis que je suis un n00b à MSIL, j'aimerais être en mesure de charger le code généré en réflecteur et veiller à ce que le code fait ce que je prie pour que ce fait;)

Seulement, je ne peux pas comprendre comment sérialiser la « Assemblée DynamicMethods Hébergé ANONYME » sur le disque. Est-ce possible? Si oui, comment?

Était-ce utile?

La solution

Je pense que si vous voulez charger la méthode dans le réflecteur ou dotPeek, vous devez créer un assemblage réel. Pour ce faire, utilisation MethodBuilder au lieu de DynamicMethod. La plupart de l'utilisation d'entre eux devrait être le même.

Autres conseils

Essayez ceci,

  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");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top