Comment obtenir le nom du fichier source et le numéro de ligne d'un type de membre?
Considérant que le déboguer le fichier de données est disponible (APB) et en utilisant soit Système.La réflexion ou un autre cadre similaire comme Mono.Cecil, comment récupérer par programmation le nom du fichier source et le numéro de la ligne où un type ou d'un membre d'un type est déclaré.
Par exemple, disons que vous avez compilé ce fichier dans une assemblée:
C:\MyProject\Foo.cs
1: public class Foo
2: {
3: public string SayHello()
4: {
5: return "Hello";
6: }
7: }
Comment faire quelque chose comme:
MethodInfo methodInfo = typeof(Foo).GetMethod("SayHello");
string sourceFileName = methodInfo.GetSourceFile(); //?? Does not exist!
int sourceLineNumber = methodInfo.GetLineNumber(); //?? Does not exist!
sourceFileName contiendra "C:\MyProject\Foo.cs" et sourceLineNumber être égal à 3.
Mise à jour: System.Diagnostics.StackFrame
est en effet en mesure d'obtenir cette information, mais seulement dans le cadre actuel de l'exécution de la pile des appels. Cela signifie que la méthode doit être appelée en premier. J'aimerais avoir la même info, mais sans invoquer le type de membre.
OriginalL'auteur Yann Trevin | 2008-09-24
Vous devez vous connecter pour publier un commentaire.
Jusqu'à la date de la méthode:
Nouveau
Framework API
qui remplit les arguments (marquée avec des attributs particuliers) au moment de l'exécution,voir plus dans ma réponse à cette question DONC
Je pense que vous fondamentalement mal compris la question. Vous avez montré comment obtenir des informations sur l'appelant, mais la question se pose de la façon d'interroger ce pour n'importe quel symbole. Voir Yann Trevin commentaire de Richard réponse.
OriginalL'auteur illegal-immigrant
À l'aide de la PDB reader fourni par le CCI Projet sur les Métadonnées, il est possible d'extraire le code à l'emplacement d'un type donné de membre. Voir un exemple de mise en œuvre dans le code source de la OSS Gallion Projet.
OriginalL'auteur Yann Trevin
vous pourriez trouver de l'aide avec ces liens:
L'obtention de fichiers et les numéros de ligne sans déployer les fichiers PDB
aussi trouvé cette suite post
"Salut Marc,
Le tableau suivant vous donne le numéro de ligne de votre code (dans le
le fichier source):
Dans le cas où vous êtes intéressé, vous pouvez trouver la routine qui vous êtes
dans, ainsi que tous ses interlocuteurs.
Cela peut être très pratique si vous voulez une généralisé routine d'erreur parce qu'il
pouvez obtenir le nom de l'appelant (qui serait l'endroit où l'erreur s'est produite).
Ce qui concerne,
Fergus
MVP [bouton Démarrer de Windows, Arrêt du dialogue]
"
Richard, le busycode lien est rompu. Est-il un lien mis à jour n'importe où?
OriginalL'auteur Richard
En utilisant l'une des méthodes expliquées ci-dessus, à l'intérieur du constructeur d'un attribut, vous pouvez fournir l'emplacement de la source de tout ce que peut avoir un attribut, par exemple une classe. Voir la suite de l'attribut de classe:
L', vous pouvez écrire par exemple:
Sortie sera:
OriginalL'auteur Harald Hoyer
L'exemple de code à l'adresse suivante fournit une classe que vous pouvez facilement modifier pour obtenir l'information que vous recherchez:
http://blogs.msdn.com/rmbyers/pages/code-sample-stacktrace-with-manual-symbol-lookup.aspx
OriginalL'auteur Dave