espera que la producción de salida & me sale en modo de depuración, y el modo de liberar bajo VS2010, .NET 4.0:Variable estática no iniciada en Release - Compiler/clr bug?
bar construct
main
de salida en modo de lanzamiento no en el depurador VS2010, y bajo WinDbg:
Programamain
no presenta este comportamiento en VS2005, .NET 2.0
using System;
namespace static_init
{
public class bar
{
public bar()
{
Console.WriteLine("bar construct");
}
}
class Program
{
public static bar blah = new bar();
static void Main(string[] args)
{
Console.WriteLine("main");
Console.ReadLine();
}
}
}
probablemente relacionadas: Static constructor can run after the non-static constructor. Is this a compiler bug?
actualización
En mi constructor de código real bar()
inicializa un cierto código de interoperabilidad con C++ (no administrado). Tiene que suceder antes que cualquier otra cosa en esta biblioteca: ¿hay alguna manera de garantizar que no se ingrese una función init()
que toque todas las estáticas (con efectos secundarios que no se mencionan externamente) en la biblioteca?
Nota para futuros buscadores: Estoy usando SWIG, y esta es una suposición que hicieron en su código de generación de envoltura. SWIGStringHelper
es el delincuente actual, sin embargo, puede haber más.
Conclusión
actualización a la versión 2.0 de TRAGO, se pone en el constructor estático, según sea necesario por una versión más reciente de .NET.
Muchas gracias por 'Actualizar' y 'Conclusión' - Tengo un escenario muy similar y también utilicé el viejo SWIG 1.3.40 - recién actualizado a 2.0.9 y todo funciona bien. "Conclusión" ¡me ahorra mucho tiempo para investigar! – sergtk