2010-09-17 14 views
5

Ich habe Artinsoft VB6 zu .NET Assistenten verwendet, um eine VB6-Anwendung in C# zu konvertieren, und ich bekomme eine Upgrade-Warnung an jedem Ort, wo früher Err.Number verwendet wurde;Err.Number (VB6 vs. C#)

// UPGRADE_WARNING: (2081) Err.Nummer hat ein neues Verhalten.

Der konvertierte Code bezieht sich auf;

Microsoft.VisualBasic.Information.Err().Number 

Ich hatte kein Glück, herauszufinden, was der Unterschied ist. Weiß jemand, was es sein könnte, oder ist es sicher, diese Warnung zu ignorieren?

UPDATE

Für alle, die über diese Frage in Zukunft stolpert - ein Wort der Warnung; Es ist NICHT sicher, Err.Number in einer C# .NET-Anwendung weiter zu verwenden. Die Eigenschaft ist weiterhin verfügbar, wird jedoch nicht wie erwartet nach Fehlern gefüllt. Der einzige Fall, in dem es wie erwartet ausgefüllt wird, ist, wenn der Fehler von einer COM-Komponente kommt.

Normale Fehler z.B. DB-Zugriff, IO-Operationen usw. geben der Err() .Nummer keinen Wert, und so muss ihre Verwendung leider refaktoriert werden.

Seltsamerweise funktioniert es in VB .NET immer noch wie erwartet, also sollte dies bei der Entscheidung über die Zielsprache für die Konvertierung berücksichtigt werden.

+0

OT: Sind Sie mit dem Job zufrieden, den die VBUC macht? – kjack

+1

@kjack: Es spart definitiv eine Menge Arbeit während des Konvertierungsprozesses, aber es gibt eine Reihe von "Macken" in seinen Musterkonvertierungen, die gewöhnungsbedürftig sind. Im Großen und Ganzen würde ich sagen, dass es sich lohnt, es zu benutzen, aber erwarte keine Wunder davon. –

+0

Danke dafür, es ist selten, Bewertungen dieser Produkte aus irgendeinem Grund zu sehen. – kjack

Antwort

2

im Grunde VB.NET unterstützt die Eigenschaft Err.Number, und es funktioniert fast genauso wie in VB6, aber beim Upgrade auf C# die Microsoft.VisualBasic.Information.Err(). Nummer ist nicht korrekt ausgefüllt, und du solltest dich nicht darauf verlassen.

Das einzige Szenario, in dem die Fehlernummer sicher festgelegt ist, ist, wenn der Fehler von einer COM-Interop-Komponente generiert wird. In diesem Fall können Sie die Fehlernummer im InnerException-Mitglied der Ausnahme überprüfen.

Sie sollten alle Err.Number-Verwendungen für .NET-Ausnahmen konvertieren und die Logik so ändern, dass sie sich bei der strukturierten Fehlerbehandlung korrekt verhält.

grüße

1

Beschreibung von VB6 Err.Number von Oktober 2000 MSDN:

Returns or sets a numeric value specifying an error. Number is the Err object's default property. Read/write.

Beschreibung von VB.NET Err.Number von MSDN:

Returns or sets a numeric value specifying an error. Read/write.

Die Ausführungen vom Oktober 2000 MSDN werden Wort für Wort in der Online-Version für VB.NET einschließlich des Beispiels kopiert. Scheint nichts zwischen den beiden zu sein.

+0

Gut genug, ich gehe davon aus, dass ich Err.Number weiterhin so verwenden kann wie zuvor. Danke, Corin. –

0

Vielleicht haben sich die verwendeten Nummern geändert?