2010-05-19 9 views
5

Tengo una aplicación .NET C# winforms que funciona muy bien en mi máquina, pero si intento ejecutarla en otra máquina, no se inicia. Sin mensaje de error, sin mensaje de bloqueo, sin ventana, nada.La aplicación .NET no se inicia silenciosamente cuando falta el ensamblaje

He encontrado que esto siempre ocurre cuando falta un ensamblaje al que se hace referencia. Supongo que este es el comportamiento general de .NET y no específico de mi aplicación, ¿o sí?

¿Hay alguna manera de configurar .NET o mi aplicación de modo que escuche un "ensamblaje referenciado faltante" como un mensaje de error en tales casos?

+1

¿Ha intentado mirar el registro de la aplicación en el Visor de eventos? Por lo general, hay algún tipo de mensaje de error explicando por qué el programa se bloqueó. – TLiebe

+0

Hola TLiebe. Gracias por su respuesta. Escríbalo como un anwer y lo aceptaré :-) De hecho, encontré el mensaje de registro de error incluso cuando el "informe de errores" estaba deshabilitado (que es prescrito por el entorno de la compañía). – chiccodoro

Respuesta

6

Esto no es normal. La aplicación morirá a causa de una excepción no controlada que desencadena un informe de errores de Windows. Tendría que adivinar que la máquina de destino tiene WER deshabilitado o reemplazado.

+0

¡Eso fue todo! Lástima que el informe de error solo me dice que la aplicación se bloqueó, pero no el ensamblaje que faltaba. Y es una lástima que el ejecutor no escriba nada en la salida de error estándar "como hacen los hombres buenos" ... Pero al menos ahora sé por qué se mantuvo completamente en silencio. – chiccodoro

+0

No existe tal magia. Debe agregarlo usted mismo, implementar un controlador de eventos para el evento AppDomain.CurrentDomain.UnhandledException. –

0

Además del ejecutable, ¿está copiando también las DLL de su carpeta de depuración/liberación a la máquina de destino?

¿Puede intentar copiando toda la carpeta de depuración/liberación en otra máquina.

También verifique la aplicación (si corresponde)/registro de eventos para obtener más información.

+0

Hola Ram. En realidad, esta fue mi razón exacta por la que falló la aplicación: olvidé copiar algunos ensambles. Pero mi pregunta aquí es por qué la aplicación no se quejó de las asambleas que faltan. – chiccodoro

+0

@chiccodoro: - No creo que esto sea posible con los ensamblados .NET. para COM puede verificar si el archivo DLL ya se encuentra en la ubicación especificada. para la aplicación .NET solo arrojará una excepción (supongo que no se encontró el método) si falta el ensamblado. Una sugerencia mía, haga que CopyLocal property = true para cada referencia, de modo que todos los ensamblados serán parte de la carpeta de depuración/versión. – Ram

Cuestiones relacionadas