2010-04-17 4 views
3

Y a-t-il quelque chose de similaire à Reflection.Emit.DynamicMethod dans Cecil? Merci.DynamicMethod dans Cecil

  1. DynamicMethod

Edit:

Qu'en est-il pour les choses suivantes?

  1. EmitCall (par exemple
    IL.EmitCall (OpCodes.Callvirt, GetBuildKey, null); IL.Emit (OpCodes.Unbox_Any, dependencyType); )
  2. LocalBuilder (par exemple LocalBuilder = résolution ilContext.IL.DeclareLocal (typeof (bool));)
  3. System.Reflection.Emit.Label (par exemple le nom existingObjectNotNull = buildContext.IL.DefineLabel();) // dois-je utiliser TextMap?
  4. ILGenerator.BeginCatchBlock (par exemple ilContext.IL.BeginCatchBlock (typeof (Exception));)
  5. ILGenerator.MarkLabel (par exemple ilContext.IL.MarkLabel (parameterResolveFailed);)
  6. ILGenerator.EndExceptionBlock() (par exemple ilContext.IL.EndExceptionBlock();)
+0

Est-ce que cecil est une bibliothèque mono, non? J'ai ajouté un tag * mono * – YOU

+0

Ouais Ouais .. Merci. –

+0

@ Michael, vous passez de. Net à mono ou juste le tester? Oh, btw, je pense que nous nous connaissons avant. – YOU

Répondre

5

il n'y a aucun moyen de créer un DynamicMethod avec Cecil, ni avoir un équivalent. Un DynamicMethod est fortement lié à l'exécution, tandis que Cecil est complètement découplé. Les deux ont un système de type complètement séparé. DynamicMethod est censé être, bien, dynamique, et en tant que tel doit utiliser le système de type System.Reflection, car c'est celui disponible à l'exécution. Mono.Cecil a une autre représentation de ce type de système adapté à l'analyse statique, sans avoir à charger réellement l'assemblage au moment de l'exécution. Donc, si vous voulez utiliser un DynamicMethod, vous devez l'utiliser avec son environnement.

Cette question a été initialement posée, iirc, dans le contexte des runtimes sans DynamicMethods ou SRE all-together, comme le Compact Framework, où Cecil peut être utilisé pour émettre du code lors de l'exécution.

Bien sûr, c'est possible, mais vous devez payer le prix de l'assemblage, ce qui n'est pas un prix très bas sur les appareils CF. Cela signifie que si vous pouviez émuler une méthode DynamicMethod en créant un assemblage avec une seule méthode statique avec Cecil, cela semble une idée terrible. Les assemblages ne seraient pas collectables (DynamicMethods le sont), ce qui en fait une fuite de mémoire géante.

Si vous avez besoin d'émettre du code au moment de l'exécution sur le Compact Framework, émettez le moins possible et émettez le moins d'assemblages possible.

+1

Merci, Jb.J'apprécie. –

Questions connexes