2010-08-26 6 views
1

Je recherche par programme un fichier .aspx et j'obtiens le nom de classe de fichier déclaré dans son CodeBehind. Par exemple, lors de l'analyse de myFile.aspx, j'ai lu sa directive de page et trouvé que son codeBehind est égal à "myApplication \ myPage.aspx.vb". Puis-je utiliser le code ci-dessous:Comment trouver le chemin du fichier à partir d'un nom namespace.class?

[Code] 
Dim Assm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom("myApplication\bin\myApplication.dll") 
Dim ClassType As Type = Assm.GetType("myApplication\myPage.aspx.vb") 

' myBaseType = "myApplication.Forms.BasePage" 
Dim myBaseType As System.Type = ClassType.BaseType 
[/Code] 

Maintenant, je veux lire la BASEFILE (class = myApplication.Forms.BasePage). Cependant, pour lire dans ce fichier, j'ai besoin d'avoir son chemin complet à la place de son hiérogame namespace/class. Dans ce cas, la BasePage est enveloppée dans une déclaration d'espace de noms différente, donc je ne peux pas simplement changer le '.' à '\'.

Comment puis-je obtenir le chemin de BasePage pour que je puisse le lire? Merci - Frank

Répondre

0

Je pense que vous devez vous concentrer sur l'obtention de la « Type » de la classe quel que soit l'emplacement via une méthode, puis appliquer GetType() Réflexion sur ce type pour obtenir son emplacement. Donc, ne vous concentrez pas sur l'espace de noms mais notez le type dans l'espace de noms BaseFile. Voici un code que j'ai traduit à partir du MSDN pour obtenir l'emplacement physique de ma classe 'Client'. Vous devriez pouvoir l'utiliser pour obtenir l'emplacement d'un binaire en fonction de son type dans votre application:

Dim SampleAssembly As [Assembly] 
    ' Instantiate a target object. 
    Dim myType As New Customer() 
    Dim Type1 As Type 
    ' Set the Type instance to the target class type. 
    Type1 = myType.GetType() 
    ' Instantiate an Assembly class to the assembly housing the Integer type. 
    SampleAssembly = [Assembly].GetAssembly(myType.GetType()) 
    ' Gets the location of the assembly using file: protocol. 
    Console.WriteLine(("CodeBase=" + SampleAssembly.CodeBase)) 

Vous pouvez lire sur ce plus au lien suivant:

Assembly.CodeBase Immobilier :
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.codebase.aspx

+0

Thanx pour la réponse, Malheureusement, cela ne me permet d'obtenir l'emplacement du .dll. J'essaye de suivre par programme la séquence/hiearchy des méthodes qui sont appelées ... et liste cela (et les noms de fichiers). Fondamentalement, j'essaye de créer une application de bureau qui regardera dans mon application d'asp.net (via son dll ou pdb) et me dira la hiérarchie des méthodes avec et leurs emplacements de chemin. L'affichage doit être similaire à la trace de la pile que vous voyez en cas d'erreur (dans asp.net). – Jason

Questions connexes