Pregunta

Este es el escenario:

Se utiliza un proyecto de aplicación C# para Windows almacenado en SVN para crear un ejecutable.Normalmente, un servidor de compilación maneja el proceso de compilación y crea compilaciones a intervalos regulares que se utilizan en las pruebas.En este caso particular, me pidieron que modificara una compilación específica y creara el ejecutable.

No estoy del todo seguro si el servidor de compilación modifica los archivos del proyecto, pero sé que crea una etiqueta en SVN del código fuente que utilizó para compilar los ejecutables.Usando esa etiqueta, verifiqué el código en una segunda máquina, que es una máquina de desarrollo.Luego compilé la fuente en la máquina de desarrollo.

Cuando se ejecuta, la aplicación que se compiló en la máquina de desarrollo no funciona exactamente como la compilada por el servidor de compilación.Por ejemplo, en las máquinas de prueba la aplicación detecta una excepción de DateTime Parse.Sin embargo, el ejecutable de la máquina de compilación no genera ninguna excepción.Si ejecuto el ejecutable en la máquina de desarrollo, no se lanzan excepciones.

En resumen, ambas máquinas utilizan teóricamente el mismo código fuente y proyectos.
El ejecutable de la máquina de desarrollo solo funciona en la máquina de desarrollo.El ejecutable de la máquina Build funciona en todas las máquinas, incluida la máquina de desarrollo.

¿La configuración regional o la zona horaria de la máquina están almacenadas en el ejecutable compilado?¿Alguna idea de qué podría causar este comportamiento o cómo verificar los ejecutables para encontrar las posibles diferencias y corregirlas?

Desafortunadamente, no puedo tomar una máquina de prueba y conectarle un depurador.En cuanto pueda lo haré.

¿Fue útil?

Solución

La aplicación utiliza la configuración regional de la máquina en la que se está ejecutando y parece que ese es su problema.Puede forzar a un hilo a utilizar una cultura específica configurando System.Threading.Thread.CurrentThread.CurrentCulture y System.Threading.Thread.CurrentThread.CurrentUICulture en un valor específico.

Otros consejos

Es posible que las dos máquinas tengan versiones diferentes de una DLL subyacente que no forma parte de su proceso de compilación.He visto que esto sucede al distribuir servicios en nuestra granja de servidores interna.

¿Puedes ejecutar el programa en la máquina de compilación con un depurador?

Si es así, entonces depura el problema. no hay necesidad de adivinar.

Haga que el depurador en la máquina de desarrollo detecte la excepción y establezca un punto de interrupción en el mismo lugar en la máquina de compilación.Vea qué es diferente entre los dos.

He visto diferentes "Opciones regionales y de idioma" en XP que causan este tipo de comportamiento.¿Coinciden en ambas máquinas?Inicio | Configuración | Panel de control | Configuración regional y de idioma...

Tengo un par de preguntas: ¿ambas máquinas tienen configuraciones regionales idénticas y dónde están los registros de errores?Espero ;-) que tenga excepciones manejadas y escritas en el disco, registros de eventos...algo que ayude con problemas como este.

¿De dónde viene la fecha que se está analizando?Si está en su base de datos, tal vez también tenga datos incorrectos.

Tuve un problema similar una vez (excepto en C++). Cuando comparé los tamaños de los ejecutables compilados, estaban muy alejados.Desafortunadamente, después de días de búsqueda, la mejor solución que encontré fue desinstalar VS05 y reinstalarlo.

¿Por qué estás utilizando un servidor de compilación de todos modos, para el código C#, si se me permite preguntar?

Los tiempos de compilación de C# cuando lo usaba apenas se notaban (<2s).¿Es realmente tan grande la aplicación?

El sistema de compilación probablemente crea una versión de lanzamiento, mientras que la compilación manual en la PC de desarrollo crea una versión de depuración.La versión de depuración tiene más verificación de errores.Vea si puede crear manualmente una versión de lanzamiento y vea si todavía hay diferencias.

El mismo código fuente rara vez si todos crean el mismo programa en diferentes computadoras.Siempre debes asumir que los programas son diferentes, nunca esperes que sean iguales.En un entorno como Linux con un buen administrador de paquetes y actualizaciones periódicas o aleatorias, nunca espere que el mismo código fuente cree el mismo programa en la misma computadora.Cuanto más alto es el idioma, peor se pone.Crear un programa para el depurador es drásticamente diferente a crearlo para su lanzamiento.La versión del depurador, incluso sin el depurador, oculta errores que no encontrará hasta que acceda a la versión de lanzamiento.Básicamente, puedes depurar el programa dos veces si confías demasiado en un entorno de depuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top