Frage

Gibt es etwas ähnlich wie Reflection.Emit.DynamicMethod in Cecil? Danke.

  1. Dynamic

Edit:

Was ist für die folgenden Dinge?

  1. EmitCall (z
    IL.EmitCall (OpCodes.Callvirt, GetBuildKey, null); IL.Emit (OpCodes.Unbox_Any, DependencyType); )
  2. LocalBuilder (z.B. LocalBuilder Lösung = ilContext.IL.DeclareLocal (typeof (bool));)
  3. System.Reflection.Emit.Label (z Label-existingObjectNotNull = buildContext.IL.DefineLabel ();) // Muss ich TextMap benutzen?
  4. ILGenerator.BeginCatchBlock (z.B. ilContext.IL.BeginCatchBlock (typeof (Exception));)
  5. ILGenerator.MarkLabel (z.B. ilContext.IL.MarkLabel (parameterResolveFailed);)
  6. ILGenerator.EndExceptionBlock () (z.B. ilContext.IL.EndExceptionBlock ();)
War es hilfreich?

Lösung

Es gibt keinen Weg, um eine Dynamic mit Cecil zu schaffen, noch hat es eine gleichwertige.

Ein Dynamic stark an die Laufzeit gebunden, während Cecil vollständig entkoppelt ist. Die beide haben ein völlig separates Typsystem. Dynamic soll sein, gut, dynamisch, und als solche haben das System.Reflection Typ-System zu verwenden, da es die ein zur Laufzeit verfügbar ist. Mono.Cecil hat eine weitere Darstellung dieser Art System geeignet statische Analyse, ohne tatsächlich die Baugruppe zur Laufzeit geladen werden. Wenn Sie also ein Dynamic verwenden möchten, müssen Sie es verwenden zusammen mit seiner Umgebung.

Diese Frage wurde ursprünglich gefragt, iirc, im Zusammenhang mit der Runtimes ohne DynamicMethods oder SRE alles zusammen, wie das Compact Framework, wo Cecil kann zur Laufzeit auszustrahlen Code verwendet werden.

Natürlich ist es möglich, aber dann muss man den Preis bezahlen die Baugruppe geladen, die auf CF-Geräte nicht kleiner Preis. Es bedeutet, dass, wenn Sie irgendwie mit einer Dynamic, indem eine Baugruppe nur eine statische Methode mit Cecil, klingt es eine schreckliche Idee nachahmen könnte. Die Baugruppen würden nicht einbringlich sind (DynamicMethods sind), ist es ein riesiges Speicherleck zu machen.

Wenn Sie brauchen, um Code zur Laufzeit auf dem Compact Framework emittieren, emit so wenig wie möglich und so wenig emit Baugruppen wie möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top