Pregunta

Estoy trabajando con el programador de DotNetNuke para programar tareas y busco obtener la ruta del archivo físico de una plantilla de correo electrónico que creé.El problema es que HttpContext es NULL porque la tarea programada está en un hilo diferente y no hay una solicitud http.¿Cómo harías para obtener la ruta física del archivo?

¿Fue útil?

Solución

Sistema.Web.Hosting.HostingEnvironment.MapPath es lo que estás buscando.Siempre que utilice los objetos Server o HttpContext.Current, verifique primero si Entorno de alojamiento tiene lo que necesitas.

Otros consejos

Hay muchas formas de hacer esto, yo personalmente lo soluciono almacenando información de ruta como una opción de configuración para mis módulos, no es elegante, pero funciona y funciona en todo momento.

Creo que Joe Brinkman en algún lugar tiene una publicación de blog sobre cómo construir un nuevo HTTPContext para usar dentro del programador.

Dado que este proceso está realmente fuera de banda en relación con el sitio web, tal vez pueda simplemente colocar la ruta en un archivo de configuración.

Puede que no sea la mejor idea, pero es una alternativa.

¿Qué dice this.GetType().Assembly.Location?

¿Puedes mirar las rutas de ensamblaje y CodeBase de esta manera?

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

Ese tipo de cosas no siempre funcionan, así que lo que recomendaría hacer es escribir un registro con una gran cantidad de datos sobre el ensamblaje, para ver qué funciona en esta ubicación.Es lo que tuve que hacer para obtener algo similar cuando estaba creando un componente COM para alojarlo en AppCenter.Utilicé esto para "obtener" lo que debería ser "APP_BASE" y lo configuré para que el archivo app.config se cargara correctamente.

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 ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top