Sont initializers Module pris en charge dans Silverlight et Windows Phone 7?
-
27-10-2019 - |
Question
Si vous êtes prêt à manipuler les supports de module IL Initialiseur
http://blogs.msdn.com/ b / junfeng / archive / 2005/11/19 / 494914.aspx
http://tech.einaregilsson.com/2009 / 12/16 / module-initializers-en-csharp /
initialiseurs sont-Module pris en charge dans Silverlight et Windows Phone 7?
La solution
Seul C ++ / CLI prend en charge un initialiseur de module. Et c'est qu'indirectement, il les utilise pour obtenir le CRT a commencé et pour obtenir des variables non gérés et objets initialisé. Vous devez écrire dans IL. J'ai essayé, il fonctionnait très bien sur Silverlight 4:
.assembly extern mscorlib
{
.publickeytoken = (7C EC 85 D7 BE A7 79 8E )
.ver 2:0:5:0
}
.assembly test
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )
.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01 00 18 53 69 6C 76 65 72 6C 69 67 68 74 2C 56
65 72 73 69 6F 6E 3D 76 34 2E 30 01 00 54 0E 14
46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C 61 79
4E 61 6D 65 0D 53 69 6C 76 65 72 6C 69 67 68 74
20 34 )
.hash algorithm 0x00008004
.ver 1:0:0:0
}
.method assembly specialname rtspecialname static void .cctor() cil managed
{
ldc.i4.s 42
stsfld int32 Example.Class1::test
ret
}
.class public auto ansi beforefieldinit Example.Class1
extends [mscorlib]System.Object
{
.field public static int32 test
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
.maxstack 8
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
ret
}
}
C'est un exemple stupide, le module initialiseur ensembles un champ statique de Class1. Je ensuite créé une instance de classe 1 dans un échantillon de l'application Silverlight et vérifié la valeur avec le débogueur.
Ce même code fait pas travail dans l'émulateur Windows Phone. J'aurais modifié le TargetFrameworkAttribute, n'a pas réellement essayer cela. Je doute que ce soit la source du problème.