Dans ASP.NET, comment obtenir le chemin d'accès au fichier physcial lorsque HttpContext.Current est NULL?

StackOverflow https://stackoverflow.com/questions/109280

Question

Je travaille avec le planificateur de DotNetNuke pour planifier des tâches et je souhaite obtenir le chemin d'accès au fichier d'un modèle de courrier électronique que j'ai créé. Le problème est que HttpContext a la valeur NULL car la tâche planifiée est sur un autre thread et il n'y a pas de requête http. Comment feriez-vous pour obtenir le chemin physique du fichier?

Était-ce utile?

La solution

System.Web.Hosting.HostingEnvironment. MapPath est ce que vous recherchez. Lorsque vous utilisez les objets Server ou HttpContext.Current, vérifiez d'abord si HostingEnvironment a ce dont vous avez besoin.

Autres conseils

Il existe de nombreuses façons de le faire. Personnellement, je le contourne en stockant les informations de chemin sous la forme d'une option de configuration pour mes modules. Ce n'est pas élégant, mais ça marche et ça marche à chaque fois.

Joe Brinkman Je pense que quelque part autour de chez vous, il y a un article sur la construction d’un nouveau HTTPContext à utiliser dans le planificateur.

Comme 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 ne pas être la meilleure idée, mais c'est une alternative.

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

Pouvez-vous regarder l'assemblage & amp; les chemins CodeBase comme ceci:

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

Ce genre de choses ne fonctionne pas toujours, donc ce que je vous recommanderais est d'écrire un journal avec un tas de données sur l'assemblage, pour voir ce qui fonctionne à 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. Je l'ai utilisé pour "obtenir" Qu'est-ce que "APP_BASE"? devrait être, et définir que, afin que le fichier app.config serait chargé 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 ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top