ASP.NET에서 HttpContext.Current가 NULL일 때 실제 파일 경로를 얻는 방법은 무엇입니까?

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

문제

저는 DotNetNuke의 스케줄러를 사용하여 작업을 예약하고 제가 만든 이메일 템플릿의 실제 파일 경로를 얻으려고 합니다.문제는 예약된 작업이 다른 스레드에 있고 http 요청이 없기 때문에 HttpContext가 NULL이라는 것입니다.파일의 실제 경로를 얻으려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

System.Web.Hosting.HostingEnvironment.MapPath 당신이 찾고있는 것입니다.Server 또는 HttpContext.Current 개체를 사용할 때마다 먼저 다음 사항을 확인하세요. 호스팅 환경 필요한 것이 있습니다.

다른 팁

이를 수행하는 방법에는 여러 가지가 있습니다. 저는 개인적으로 경로 정보를 모듈의 구성 옵션으로 저장하여 이 문제를 해결합니다. 우아하지는 않지만 매번 작동하고 작동합니다.

나는 Joe Brinkman이 스케줄러 내에서 사용할 새로운 HTTPContext를 구성하는 방법에 대한 블로그 게시물을 어딘가에 갖고 있다고 믿습니다.

이 프로세스는 실제로 웹 사이트와 관련하여 대역 외이므로 구성 파일에 경로를 입력하면 됩니다.

최선의 아이디어는 아닐 수도 있지만 대안입니다.

this.GetType().Assembly.Location 은 무엇입니까?

다음과 같이 어셈블리 및 CodeBase 경로를 볼 수 있습니까?

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

그런 종류의 작업이 항상 작동하는 것은 아니므로 제가 권장하는 방법은 어셈블리에 대한 많은 데이터가 포함된 로그를 작성하여 이 위치에서 작동하는 방법을 확인하는 것입니다.AppCenter에서 호스팅할 COM 구성 요소를 만들 때 비슷한 것을 얻기 위해 해야 했던 작업입니다.나는 이것을 "APP_BASE"가 무엇인지 "얻고" 설정하는 데 사용하여 app.config 파일이 제대로 로드되도록 했습니다.

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 ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top