Error: The command copy exited with code 1…

Problema:

Al compilar una librería de clases o ejecutable, aparece un error del tipo “The command copy … exited with code 1”.

Solución:

Es un error que surge debido a que la librería o ejecutable ejecuta algún comando en los eventos Pre-Build o Post-Build (accesible desde las propiedades del proyecto actual), que en este caso es un copy… Deberíamos estar verificando la correcta sintaxis de los comandos que se ejecutan.

Configuración Pre-Build y Post-Build

Configuración Pre-Build y Post-Build

En mi caso me surgió este error debido a que una de las carpetas a la cual copiaba la dll no existía.

Publicado en Errores. Etiquetas: . 1 Comment »

Error: Unhandled exception en WinForms…

Como desarrolladores una de las cosas que debemos tener siempre en cuenta es la posibilidad de que una instrucción ocasionalmente produzca una excepción. Para capturar excepciones y manipularlas, lo hacemos con la ayuda de nuestros queridísimos try{}catch{}finally{}.

Sin embargo hay veces en que se nos pueden pasar de largo y terminar en lo que se denomina una excepción no manejada o unhandled exception. En esos casos, el resultado es un hermoso mensaje del framework como el que se muestra a continuación:

Mensaje de excepción no manejada de WinForm

Mensaje de excepción no manejada de WinForm

En casos como este, existe la posibilidad de reemplazar este mensaje por uno personalizado, quizás un poco mas amigable que el que nos brinda el framework.
Para personalizar el mensaje, podemos hacer uso del evento Application.ThreadException.

Ejemplo:

static class Program {

    [STAThread]
    static void Main() {
        //Manejamos excepciones no controladas
        Application.ThreadException += App_ThreadException;

        Application.Run(new Form1());
    }

    static void App_ThreadException(object sender, ThreadExceptionEventArgs e) {
        //El usuario desea continuar?
        StringBuilder msg = new StringBuilder();

        msg.AppendLine("Ooops! ha ocurrido un problema en la aplicación:");
        msg.AppendLine(e.Exception.Message);
        msg.Append("¿Desea continuar la ejecución de la aplicación?");

        DialogResult res = MessageBox.Show(msg.ToString(), "Error inesperado", 
            MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

        if (res == DialogResult.Yes) {
            //Si desea continuar, no hacemos nada
            return;
        }
        else {
            //Si desea salir de la aplicación, la cerramos
            Application.Exit();
        }
    }
}

como resultado obtenemos el siguiente mensaje cuando ocurre una excepción no manejada:

Mensaje excepción no manejada personalizado

Mensaje excepción no manejada personalizado

Obviamente este no es más que un simple ejemplo. Además, cuando ocurre un error de este tipo, podriamos brindar más información o incluso permitirle al usuario enviar un mail que nos notifique que ocurrió un error, junto con la información del mismo, como ser StackTrace, Source, InnerException, etc. O simplemente no hacer nada….

Publicado en C#. Etiquetas: , . Leave a Comment »

Error: System.IO.File.OpenRead() throw IOException…

Con esta entrada comienzo a nombrar problemas y errores comunes y las soluciones que he encontrado a cada una de ellas. Podrán identificar estas entradas por la etiqueta o porque el título comienza con “Error”.

Problema:

System.IO.File.OpenRead(FileName) tira una excepción del tipo “System.IO.IOException” con texto: {“The process cannot access the file ‘C:\\archivo.txt’ because it is being used by another process.”}, cuando el archivo que queremos leer se encuentra bloqueado por otro proceso.

Solución:

Reemplazar 

System.IO.Stream input = System.IO.File.OpenRead(FileName)

por:

System.IO.Stream input = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)

Publicado en Errores. Etiquetas: . Leave a Comment »