Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas

jueves, 28 de agosto de 2008

Error 1935.An error occurred during the installation of assembly - HRESULT: 0x80070020

Error 1935.An error occurred during the installation of assembly

Estaba yo intentando instalar el Visual Studio 2008 porque lo había quitado de mí máquina por motivos que no vienen al caso y me encontré con el siguiente error "Error 1935.An error occurred during the installation of assembly...." y el nombre de un aseembly y a continuación "HRESULT: 0x80070020", esto no hubiera sido tan grave sino fuera porque me apareción casi al final de la instalación que no es de las más cortas que he visto, y además a continuación le llevó más tiempo hacer el rollback, pero bueno, el mayor problema es que no tenía idea de qué pasaba, luego de "bucear" por Intenet llegué a la conclusión que se trataba de un error al intentar registrar una DLL (porque por supuesto intenté otra vez y pasó lo mismo con otro nombre de DLL) entre muchos consejos se encontraban desactivar los AdAware, los Antivirus, etc. eso no hubiera sido raro sino fuera porque no tengo nada de eso en la máquina, en fin, seguí buscando y encontré la solución....desactivar todos los servicios que no sean de Microsoft, entonces fui a ejecutar "msconfig" desactivé Procesar Archivo SYSTEM.INI y CARGAR ELEMENTO DE INICIO, luego fui a la solapa de servicio y seleccioné "Ocultar todos los servicios de Microsoft", desactivé todo lo que quedó, reinicié la máquina y santo remedio, pude instalar, pero no sin quedarme con la duda de qué pasaba.

Lo importante es el HRESULT

Lo importante para encontrar la solución fue el HRESULT del error, por supuesto que no lo anoté, para encontrarlo fui al directoril temporal de mi usuario "ejecutar->%temp%" y busqué un archivo txt con un nombre del estilo err_vs_algo y ahí estaba la información, porque el error 1935 es muy genérico en realidad, lo que importa, como dije antes es el HRESULT.

Saludos.

viernes, 8 de agosto de 2008

Cómo iniciar varios proyectos a la vez con Visual Studio

Cómo correr dos aplicaciones a la vez desde Visual Studio

Una vez más algo que surge de mis experiencias diarias, esto viene a cuenta de tener una aplicación cliente y otra servidor que por motivos de prolijidad están dentro de la misma solución, el problema es que para depurar ambas de modo simultáneo se hacian cosas poco felices como abrir dos Visual Studio, bueno, hay una forma de hacerlo bien.

Cómo indica a Visual Studio que ejecute varias aplicaciones de modo simultáneo

El truco (o la forma correcta de hacerlo) es más que sencilla, vamos a ver.

Primero que nada vamos a pararnos en el explorador de soluciones y hacer botón derecho sobre el nodo de la solución, es ese momento vemos la siguiente pantalla

Al ir a la propiedades vamos a ver esto

 

Justamente en la opción starup project hay una opción que dice "multiple starup project" y para los que no saben Inglés es algo como "inicio de múltiples proyectos....con un poco de astucia sabemos que estamos ante la solución.

Dentro de las opciones de "iniciar múltiples proyectos" Dentro de las opciones de "iniciar múltiples proyectos" podemos indicarle a Visual Studio cómo iniciar los proyectos, con las siguientes acciones

None: No hace nada

 Start: Inicia en modo debug

Start without debugging: Inicia pero sin la posiblidad de depurar.

Mágico, y simple, hasta la próxima.

jueves, 22 de mayo de 2008

Pruebas manejadas por datos con VIsual Studio o Data Driven Test

Pruebas manejadas por datos con Visual Studio

Un utilidad interesante del Visual Studio es la posibilidad de que un método de prueba (TestMethod) se ejecute múltiples veces a partir de un origen de datos, qué quiero decir con esto, teniendo un origen de datos (SqlServer, Access, Oracle, Excel, cualquier cosa que tenga un conector .net) podemos hacer que el IDE de Visual Studio ejecute un método de prueba (un TestMethod) una vez por cada registro de un origen de datos.
Por ejemplo, podemos tenes un método para probar un cierto algorítmo pero como no podemos tener todos los casos de prueba claro de entemano (quiero decir los posibles datos de entrada) podemos hacer que el método los tome del origen de datos y se ejecute una vez por cada registros, esto nos permite dos cosas:

-Poder dejar para más adelante todos los casos posibles, no pensarlo ahora, o porque no los sabemos o porque no queremos o lo que sea.
-Delegar a otra persona (funcional tal vez) la tarea de crear los datos de entrada e incluso ejecutar la prueba unitaria

Por supuesto, no podemos saber de antemano que van a poner, así que una forma astuta (que obviamente no se me ocurrió a mí) es poner una columna adicional con el resultado esperado, pero bueno, basta, vamos al código

/// <summary>
/// Este método se ejecuta una vez por cada fila de la tabla
/// </summary>
[TestMethod]
[DataSource(
  "System.Data.Odbc", 
    @"Dsn=Excel Files;
    dbq=C:\\Pruebas\\datosPruebaDB\\origenDatos.xls;
        defaultdir=C:\\Pruebas\\datosPruebaDB;
    driverid=790;
    maxbuffersize=2048;
    pagetimeout=5", 
    "Datos$", 
    DataAccessMethod.Sequential)]
public void TestMethod1()
{
   //recuperados los valores del origen de datos
    string valor = this.Context.DataRow["Valor"].ToString();
    bool resultado = Convert.ToBoolean(this.Context.DataRow["Resultado"]);

    //nuestra función de validación de largos
    bool largoCorrecto = (valor.Length>6);

    //assert para verficar si coincide con el resultado esperado
    Assert.AreEqual<bool>(largoCorrecto, resultado);

}

Y listo es todo, es este caso mi archivo Excel tiene esta forma

Valor Resultado
Leonardo 1
Gabriel 1
Hernán 0
Gerardo 1
Norberto 1
Adrián 0
Angel 0
Albino 0

Lo hice con Excel para que sea más visual, por supuesto, la hoja donde se encutran estos datos se llaman "Datos" y me conecto por ODBC. La columna con el encabezado valor es el valor de entrada y la que se llama resultado es el resultado esperado, como puede verse simplemente agrego un atriburo en el método indicando el origen de datos y después recupero la fila actual con el TestContext.

Enjoy,