Werden Modulinitialisierer in Silverlight und Windows Phone 7 unterstützt?
-
27-10-2019 - |
Frage
Wenn Sie bereit sind, IL .NET zu manipulieren, unterstützt die Modulinitialisierer des Moduls
http://blogs.msdn.com/b/junfeng/archive/2005/11/19/494914.aspx
http://tech.einaregilsson.com/2009/12/16/module-initializers-in-csharp/
Werden Modulinitialisierer in Silverlight und Windows Phone 7 unterstützt?
Lösung
Nur C ++/CLI unterstützt einen Modulinitialisierer. Und das ist nur indirekt, es verwendet sie, um die CRT zu starten und unermessliche Variablen und Objekte initialisiert zu erhalten. Sie müssen in IL schreiben. Ich habe es versucht, es hat bei Silverlight 4 gut funktioniert:
.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
}
}
Es ist ein dummes Beispiel, der Modulinitialisierer legt ein statisches Feld von Class1 fest. Ich habe dann eine Instanz von Class1 in einer Beispiel -Silverlight -App erstellt und den Wert mit dem Debugger überprüft.
Genau dieser Code tat genau nicht Arbeiten Sie im Windows Phone -Emulator. Ich hätte das TargetFrameworkAttribute ändern sollen und dies nicht wirklich versucht haben. Ich bezweifle, dass es die Quelle des Problems ist.