Je clone des Types via System.Reflection.Emit.
Cela marche très bien pour à peu près n'importe quoi, sauf, apparemment, pour les méthodes qui retournent des valeurs.
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public class TestClass
{
	public string Text() { return "texte"; }
}
Voici le code MSIL original :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
0000 : nop
0001 : ldstr "texte"
0006 : stloc.0
0007 : br.s 0009
0009 : ldloc.0
000a : ret
Et voici le code généré...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
0000 : nop
0001 : ldstr "texte"
0006 : stloc.0
0007 : br.s 0012
0009 : nop
000a : nop
000b : nop
000c : ldloc.0
000d : ret
A noter que je copie instruction par instruction, et qu'à priori, les instructions copiées sont correctes (j'ai vérifié avec une exécution pas-à-pas du programme de copie).

Comment expliquer ces 3 nop supplémentaires et le décalage de 9 octets dans l'opérande du br.s ?