2010-09-17 6 views
5

J'ai utilisé l'assistant VB6 to .NET d'Artinsoft pour convertir une application VB6 en C# et j'obtiens un avertissement de mise à niveau à tout endroit où Err.Number était précédemment utilisé;Err.Number (VB6 contre C#)

// UPGRADE_WARNING: (2081) Le numéro d'erreur a un nouveau comportement.

Le code converti fait référence à;

Microsoft.VisualBasic.Information.Err().Number 

Je n'ai pas eu de chance de découvrir quelle est la différence. Est-ce que quelqu'un sait ce que cela pourrait être, ou est-il prudent d'ignorer cet avertissement?

MISE À JOUR

Pour ceux qui tombe par hasard sur cette question à l'avenir - un mot d'avertissement; Il n'est PAS sûr de continuer à utiliser Err.Number dans une application C# .NET. La propriété est toujours disponible, mais elle n'est pas remplie après les erreurs comme prévu. Le seul cas dans lequel il est rempli comme prévu est si l'erreur provient d'un composant COM.

Erreurs normales e.g. L'accès à la base de données, les opérations d'E/S, etc. ne donneront aucune valeur à Err(). Nombre, et son utilisation doit malheureusement être refactorisée. Assez curieusement, dans VB .NET, il fonctionne toujours comme prévu, c'est peut-être quelque chose à garder à l'esprit lorsque vous prenez une décision sur la langue cible pour la conversion.

+0

OT: êtes-vous satisfait du travail que fait le VBUC? – kjack

+1

@kjack: Cela économise beaucoup de travail au cours du processus de conversion, mais il y a un certain nombre de "bizarreries" dans ses conversions de patterns qui demandent un peu de temps pour s'y habituer. Dans l'ensemble cependant, je dirais que cela vaut probablement la peine d'utiliser, mais ne vous attendez pas à des miracles. –

+0

Merci pour cela, il est rare de voir des commentaires sur ces produits pour une raison quelconque. – kjack

Répondre

2

Fondamentalement, VB.NET prend en charge la propriété Err.Number et fonctionne à peu près de la même manière que dans la version 6, mais lors de la mise à niveau vers C#, le numéro Microsoft.VisualBasic.Information.Err() n'est pas correctement renseigné. et vous ne devriez pas compter dessus. Le seul scénario dans lequel le numéro d'erreur est défini, est lorsque l'erreur est générée par un composant interop COM, auquel cas vous pouvez vérifier le numéro d'erreur dans le membre InnerException de l'exception.

Vous devez convertir tous les usages Err.Number pour les exceptions .NET et modifier la logique pour qu'elle se comporte correctement avec la gestion des erreurs structurées.

salutations

1

Description VB6 Err.Number d'Octobre 2000 MSDN:

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

Description VB.NET Err.Number de MSDN:

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

Les remarques du octobre 2000 MSDN sont copiés mot à mot dans la version en ligne pour VB.NET, y compris l'exemple. Ça ne semble pas être différent entre les deux.

+0

Juste assez, je vais supposer pour l'instant que je peux continuer à utiliser Err.Number comme précédemment. Merci Corin. –

0

Peut-être que les chiffres utilisés ont changé?