2009-08-31 5 views
8

J'ai un système de modèle qui ressemble à du code ASP ancien. Je cours cela à travers une classe qui réécrit toute la chose en code source C#, compile, et finalement l'exécute. Ce que je me demande, c'est s'il y a une sorte de directive # pragma, je peux saupoudrer le code C# généré qui fera que les erreurs de compilation correspondent aux numéros de ligne dans mon fichier modèle?Existe-t-il une directive #pragma ou une directive similaire pour le code C# généré afin de faire correspondre les numéros de ligne de code de modèle avec le numéro de ligne C#?

Par exemple, disons que j'ai cette première et seule ligne dans mon code de modèle:

Object o = datta; // should be data, compiler error 

mais afin de compiler cela, je dois ajouter un espace de noms, une classe, une méthode et une chaudière Placer le code dessus, donc cette ligne ci-dessus, qui est la ligne n ° 1 dans mon fichier modèle, finit par être la ligne n ° 17 (nombre aléatoire, juste à titre illustratif) dans le code C#. L'erreur du compilateur indiquera naturellement mon erreur comme étant sur la ligne # 17, et non sur la ligne # 1. Je me souviens d'un autre langage de programmation que j'ai utilisé auparavant (bien que je ne me souvienne pas lequel) qu'il avait une directive que je pourrais ajouter, ce qui ferait aligner les numéros de ligne d'erreur.

Y a-t-il une telle chose dans C# 3.5?

Répondre

16

Vous avez le #line preprocessor directive.

#line permet de modifier le numéro de ligne du compilateur et (facultativement) la sortie du nom de fichier pour les erreurs et les avertissements.

Le #line directive peut être utilisé dans une étape intermédiaire automatisée du processus de construction. Par exemple, si les lignes ont été supprimées du fichier de code source d'origine, mais que vous souhaitiez toujours que le compilateur génère une sortie basée sur la numérotation des lignes d'origine, vous pouvez supprimer des lignes et simuler la numérotation des lignes avec #line.

La directive #line hidden masquer les lignes successives du débogueur, de sorte que lorsque les étapes de développement dans le code, les lignes entre un #line hidden et la prochaine directive #line (en supposant qu'il n'y a pas un autre #line directive cachée) sera être renversé. Cette option peut également être utilisée pour permettre à ASP.NET de différencier le code défini par l'utilisateur et le code généré par la machine. Bien qu'ASP.NET soit le principal consommateur de cette fonctionnalité, il est probable que d'autres générateurs de sources l'utiliseront.

Une directive #line hidden n'affecte pas les noms de fichiers ou les numéros de ligne dans les rapports d'erreurs. C'est-à-dire, si une erreur est rencontrée dans un bloc caché, le compilateur indiquera le nom de fichier actuel et le numéro de ligne de l'erreur.

La directive #line filename indique le nom du fichier que vous souhaitez voir apparaître dans la sortie du compilateur. Par défaut, le nom réel du fichier de code source est utilisé. Le nom de fichier doit être entre guillemets doubles ("") et doit être précédé d'un numéro de ligne.

+0

+1, apprendre quelque chose de nouveau tous les jours – JaredPar

+0

C'était exactement ce dont j'avais besoin! Merci! –

+0

@Jared: Je l'ai vu un jour à travers le code WPF généré et était comme. : hmm: :) C'est ce qui lie les erreurs au fichier XAML d'origine. –

Questions connexes