2013-03-26 16 views
7

Kürzlich habe ich einige Kodierung im Internet angeschaut. Ich fand einige Leute verwenden Microsoft.VisualBasic.CompilerServices.ProjectData.ProjectData Klasse in catch Block.Warum Leute ProjectData verwenden

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

Ich suchte es Msdn auf, die erwähnt, dass diese API .NET Framework-Infrastruktur unterstützt und ist nicht direkt von Ihrem Code verwendet werden.

Ich bin neugierig, warum Menschen es verwenden. Würdest du es mir erklären?

+0

auf den ersten Blick glaube ich, der Autor versucht, diese Ausnahme als einen internen VB-Fehler zu setzen. Die Frage sollte vielleicht an den Autor des Codes gehen, auf den Sie sich beziehen. – Dhawalk

+0

Wenn Sie eine in VB erstellte Assembly mithilfe eines Reflektors dekompilieren, werden Sie feststellen, dass der VB-Compiler automatisch viele solcher Aufrufe einfügt –

Antwort

7

Meine Erfahrung ist, dass diese Art der Code-Verwendung in C#/VB.NET-Projekten gefunden wird, die von VB6 konvertiert wurden. Bei der Entwicklung neuer C#/VB.NET-Lösungen/-Projekte sollte diese Vorgehensweise nicht verwendet werden.

Hinweis: Diese Technik kann problemlos durch eine geeignete Ausnahmebehandlung ersetzt werden, die Sie normalerweise in anderen .NET-Lösungen/-Projekten verwenden würden.

2

Dieser Code wird entweder von einem Codeumwandlungstool ausgegeben, das VB-Code in C# konvertiert hat, oder durch das Dekompilieren einer Assembly, die ursprünglich mit VB erstellt wurde.

Ich bin ein VB-Projekt Mono zu portieren, und fand heraus, dass der VB-Compiler diese Anrufe ProjectData.SetProjectError(exception) und ProjectData.ClearProjectError() in jedem catch-Block injiziert, und versuchen, einen Weg zu finden, den Compiler zu tun, so zu verhindern, weil Mono nicht Implementieren Sie das Modul ProjectData. Und habe deine Frage bei meiner Recherche gefunden!

0

so ist dies ein Ergebnis der alten Legacy Vb6 für die Interessenten. Als vb6 gestartet wurde, gab es ein Err-Objekt, das immer noch vorhanden ist, aber zum Projektdatenobjekt in Vb verschoben wurde. wenn jemand wie ich erinnert sich an vb6 (das ist zurück, als Dinosaurier die Erde durchstreiften), gab es einen handlichen kleinen Anruf bei Fehler resume next. Das ist, wenn Sie diese lästigen kleinen Ausnahmen nicht mögen. die meisten vb6-programme nutzten es ausgiebig und voila gab es keine ausnahme, weil man keine ignoriert hat. So kommt hier die Erklärung.

catch (Exception exception1) // alle Ausnahmen abfangen, die nur

{ 

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

// im err Objekt passiert, wenn jemand tatsächlich will

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

überprüfen, wie Sie diese vollständig zu sehen ist Ohne Ausnahmen zu ignorieren und in echter vb6 Mode, explodiert Ihr Code einfach ohne Erklärung. Unnötig zu sagen, wenn irgendjemand einen Code wie diesen schreibt oder vb auf diese Weise benutzt, werde ich dich finden und einen Weg finden, dich inhaftiert zu bekommen.

Verwandte Themen