2008-09-20 16 views

Répondre

13

System.Web.Hosting.HostingEnvironment.MapPath est ce que vous cherchez. Chaque fois que vous utilisez le serveur ou les objets HttpContext.Current, vérifiez d'abord si HostingEnvironment a ce dont vous avez besoin.

+0

et si vous êtes en dehors d'un projet Web, mais que vous voulez disons aller au dossier des images de votre projet web pour récupérer une image ou lire permet de dire le contenu d'un fichier .htm que les sites de votre site Web mais vous avez une méthode utilitaire que vous voulez appeler à l'extérieur pour obtenir ce fichier? – PositiveGuy

+0

Si vous êtes en dehors du projet Web, je pense que vous aurez besoin de votre propre code personnalisé pour localiser le projet Web de toute façon. Une fois que vous avez cela, vous pouvez continuer à suivre ce chemin sans aucune aide spéciale comme 'MapPath'. – bdukes

0

Étant donné que ce processus est vraiment hors-bande par rapport au site Web, vous pouvez peut-être simplement placer le chemin dans un fichier de configuration.

Peut-être pas la meilleure idée, mais c'est une alternative.

0

que dit this.GetType(). Assembly.Location?

+1

Il renvoie c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Fichiers ASP.NET temporaires \ mywebsite \ 50f1a686 \ ab5b581d \ App_Code.xkcsxvg6.dll – John

0

Pouvez-vous regarder à l'Assemblée & les chemins de CodeBase comme celui-ci:

Imports System.Reflection 
Imports System.IO 
... 
Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) 

Ce genre de choses ne fonctionne pas toujours, donc ce que je recommande de faire est d'écrire un journal avec un tas de données sur l'assemblée, pour voir ce qui fonctionne dans cet endroit. C'est ce que je devais faire pour obtenir quelque chose de similaire lorsque je créais un composant COM à héberger dans AppCenter. J'ai utilisé ceci pour "obtenir" ce que "APP_BASE" devrait être, et le définir, ainsi le fichier app.config se chargerait correctement.

Log.Write (Assembly.GetExecutingAssembly().CodeBase) 
Log.Write (Assembly.GetExecutingAssembly().Location) 
Log.Write (Path.GetFullPath(".")) 
Log.Write (Application.StartupPath) 
... and so on, whatever you can think of ... 
1

Il y a plusieurs façons de le faire, personnellement je contourne le problème en stockant les informations de chemin comme une option de configuration pour mes modules, ce n'est pas élégant, mais ça fonctionne et fonctionne à chaque fois.

Joe Brinkman Je crois que quelque part a publié un blog sur la façon de construire un nouveau HTTPContext à utiliser dans le planificateur.

+0

Pour les futurs lecteurs, les articles de Joe Brinkman sont [ici, pour la version originale] (http://www.dnnsoftware.com/community-blog/cid/135304/the-quest-for-the-dotnetnuke-holy-grail) et [ici pour une version mise à jour] (http://www.dnnsoftware.com/community-blog/cid/137009/new-and-improved-holy-grail). – AaronSieb