Je travaille avec le planificateur de DotNetNuke pour planifier des tâches et je cherche à obtenir le chemin physique d'un modèle d'email que j'ai créé. Le problème est que HttpContext est NULL car la tâche planifiée est sur un thread différent et il n'y a pas de requête http. Comment iriez-vous obtenir le chemin physique du fichier?Dans ASP.NET, comment obtenir le chemin du fichier physcial lorsque HttpContext.Current est NULL?
Répondre
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.
É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.
que dit this.GetType(). Assembly.Location?
Il renvoie c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Fichiers ASP.NET temporaires \ mywebsite \ 50f1a686 \ ab5b581d \ App_Code.xkcsxvg6.dll – John
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 ...
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.
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
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
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