Los inicializadores de módulo son una característica del CLR que no están disponibles directamente en C# o VB.NET. Son métodos estáticos globales llamados .cctor
que se garantiza que se ejecutarán antes de que se ejecute cualquier otro código (inicializadores de tipo, constructores estáticos) en un ensamblaje. Hace poco quería utilizar esto en un proyecto y hacked together my own solution (console program/msbuild task) usando Mono.Cecil, pero me preguntaba:Iniciales del módulo en C#
¿Hay alguna manera de engañar al compilador de C# en emitiendo intializers módulo? ¿Algún atributo (por ejemplo, CompilerGenerated, SpecialName) u otro truco que se pueda usar?
¿Los C#/VB.NET alguna vez emiten estos inicializadores por algún motivo? Por lo que he visto, C++ administrado los usa para algunos propósitos de interoperabilidad, pero no pude encontrar ninguna referencia a que se usen para otros fines. ¿Algunas ideas?
Puede utilizar una técnica similar a la [Biblioteca de Melke Squeeze sin restricciones] (http://code.google.com/p/unconstrained-melody/), que utiliza para eludir el hecho de que no puede usar restricciones enum en C#. Su solución es usar atributos de marcador de posición para conducir un programa posterior al proceso (escrito en C#) que impulsa ilasm.exe para volver a escribir el IL para implementar correctamente las cosas que no se pueden implementar en C#. –
Discusión relacionada: http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx – user423430