2013-01-06 5 views
1

J'ai travaillé avec un projet Visual Studio Addin pendant un certain temps. Le but de cet ajout est de me dire quelles sont les procédures de magasin utilisées dans mes nombreux projets. Je réalise cela en chargeant tous mes projets, y compris les projets Business et DataAccess, dans une seule solution, puis en utilisant EnvDTE pour parcourir les projets de la solution afin d'obtenir les codesitems spécifiques.Réflexion sur le site Web ASP.Net

De cette façon, je peux identifier les méthodes appelant les différentes procédures stockées, et cela fonctionne tout simplement bien.

ensuite d'identifier les méthodes appellent les différentes méthodes dans mon projet DataAccess, j'utiliser la réflexion pour charger l'Assemblée pour chaque projet:

foreach (EnvDTE.Project proj in this._solution.Projects) { 
    assembly = System.Reflection.Assembly.LoadFrom(GetAssemblyPath(proj)); 
} 

private string GetAssemblyPath(EnvDTE.Project vsProject) 
{ 
    string assemblyPath = ""; 
    string fullPath = vsProject.Properties.Item("FullPath").Value.ToString(); 
    string outputPath = vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString(); 
    string outputDir = System.IO.Path.Combine(fullPath, outputPath); 
    string outputFileName = vsProject.Properties.Item("OutputFileName").Value.ToString(); 
    assemblyPath = System.IO.Path.Combine(outputDir, outputFileName); 

    return assemblyPath; 
} 

Ce système fonctionne tout simplement génial pour la plupart des projets, mais maintenant je a rencontré un problème, et je ne peux pas le contourner ....

Est-il possible d'utiliser ce type de montage de l'ensemble de réflexion pour un projet WebSite. Il échoue sur:

vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath") 

Étant donné que le site ne propose pas un chemin de sortie de la même manière que les projets WinForms og dll a ...

Je dois utiliser la réflexion car il est impossible d'identifier les appels à méthodes surchargées utilisant EvnDTE seul. Avec la réflexion, je peux obtenir les instructions d'un corps de méthode, identifiant ainsi quelle méthode surchargée est appelée.

EnvDTE fonctionne correctement dans les projets WebSite, mais la réflexion ne l'est malheureusement pas. :(

En utilisant EnvDTE Je ne suis en mesure d'obtenir le contenu du texte d'une méthode.

Quelqu'un sait-il ce qu'il faut faire pour obtenir ce travail?

+0

Pourriez-vous plutôt juste charger tous les fichiers .DLL et .EXE dans le répertoire de sortie? –

+0

Ce serait préférable. Mais comme il s'agit d'un projet WebSite, il n'y a pas de chemin de sortie. Et un projet WebSite n'est pas directement construit en tant que DLL ou exe. Les seuls assemblys mis dans le dossier AppCode du site sont les dll référencés – Beaker

+0

échoue-t-il parce que vous essayez d'utiliser la variable outputpath même si elle n'a pas de valeur, ou lance-t-elle une exception quand vous essayez d'assigner la valeur? –

Répondre

0

Il a échoué parce qu'un projet WebSite ne créer une dll d'assemblage de sortie qui est accessible et contient toutes les informations. Ceci est la place créée à la volée par le serveur Web.

Je ne pouvais pas me déplacer et ma solution était de convertir simplement mes projets WebSite aux projets WebApplication.

Ce sont des projets normaux réels et ont une DLL d'assemblage précompilée à laquelle je peux accéder.

Merci pour vos commentaires ...

Questions connexes