Pregunta Por qué la gente usa ProjectData


Recientemente miré algunos códigos en la web. Encontré que algunas personas usan Microsoft.VisualBasic.CompilerServices.ProjectData.ProjectData clase en catch bloquear.

 catch (Exception exception1)
        {
            //ProjectData.SetProjectError(exception1);
            Console.WriteLine(exception1.ToString());
            Console.WriteLine();
            Console.WriteLine(sSQL);
            //ProjectData.ClearProjectError();
        }

Lo busqué en msdn que mencionó que esta API admite la infraestructura de .NET Framework y no está destinada a ser utilizada directamente desde su código.

Tengo curiosidad por la razón por la que las personas lo usan. ¿Me lo explicarías?


8
2018-03-26 20:43


origen


Respuestas:


Mi experiencia ha sido que este tipo de uso de código se encuentra en proyectos c # / VB.NET que se han convertido de VB6. Al desarrollar nuevas soluciones / proyectos de c # / VB.NET, esta práctica no debe ser utilizada.

Nota: Esta técnica se puede reemplazar con seguridad con el manejo de excepciones adecuado que usted estaría acostumbrado a ver en otras soluciones / proyectos de .NET.


8
2018-03-26 20:46



Este código es emitido por una herramienta de conversión de código que convirtió el código VB a C #, o como resultado de la descompilación de un ensamblado que se creó originalmente utilizando VB.

Estoy trasladando un proyecto de VB a Mono, y descubrí que el compilador de VB inyecta estas llamadas ProjectData.SetProjectError(exception) y ProjectData.ClearProjectError() en cualquier bloque catch, y tratar de encontrar una manera de evitar que el compilador lo haga porque Mono no implementa el ProjectData módulo. ¡Y encontró su pregunta mientras hacía mi investigación!


3
2017-11-17 19:48



así que esto es un resultado del viejo legacy vb6 para los interesados. cuando vb6 comenzó, había un objeto err que todavía está presente pero se ha movido al objeto projectdata en vb. si alguien como yo recuerda vb6 (esto está de vuelta cuando los dinosaurios vagabundeaban por la tierra), había una pequeña llamada práctica sobre error a continuación. esto es si no te gustaban esas molestas y pequeñas excepciones. la mayoría de los programas vb6 lo usaron copiosamente y no tuvieron excepciones porque ignoró alguno. así que aquí viene la explicación.

catch (Exception exception1) // atrapa las excepciones que acaban de pasar

    {

        ProjectData.SetProjectError(exception1); // set the information 

// en el objeto err si alguien realmente quiere verificar

        ProjectData.ClearProjectError(); //clear the err object
    }

como puede ver, esto está ignorando por completo cualquier excepción y, como en verdad vb6, su código explota sin explicación alguna. No hace falta decir que si alguien escribe código como este o usa vb de esta manera, te encontraré y encontraré la manera de encerrarlo.


2
2017-12-22 01:28