2011-03-20 73 views

回答

1

只有C++/CLI支持模块初始值设定项。这只是间接的,它使用它们来启动CRT并获得初始化的非托管变量和对象。你必须在IL上写下。我想,它的工作就好了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 
    } 
} 

它是一种愚蠢的例子中,模块的初始化设置的Class1的静态字段。然后,我在示例Silverlight应用程序中创建了一个Class1实例,并使用调试器验证了该值。

这个完全相同的代码没有而不是在Windows Phone模拟器中工作。我应该修改了TargetFrameworkAttribute,但实际上并没有尝试这样做。我怀疑这是问题的根源。

相关问题