8

DotNetNukeのスケジューラーを使用してタスクをスケジュールしており、作成した電子メールテンプレートの物理ファイルパスを取得しようとしています。問題は、スケジュールされたタスクが別のスレッドにあり、httpリクエストがないため、HttpContextがNULLになることです。ファイルの物理パスをどのように取得しますか?

4

5 に答える 5

14

System.Web.Hosting.HostingEnvironment.MapPathはあなたが探しているものです。Server または HttpContext.Current オブジェクトを使用している場合は常に、まずHostingEnvironmentに必要なものがあるかどうかを確認してください。

于 2008-09-22T13:53:26.293 に答える
1

これには多くの方法があります。個人的には、パス情報をモジュールの構成オプションとして保存することで回避しています。エレガントではありませんが、毎回機能し、機能します。

Joe Brinkman のどこかで、スケジューラ内で使用する新しい HTTPContext を構築する方法についてのブログ投稿があると思います。

于 2008-09-22T15:44:33.513 に答える
0

このプロセスは実際にはWebサイトとの関係で帯域外であるため、パスを構成ファイルに入れるだけでよい場合があります。

最善のアイデアではないかもしれませんが、それは代替案です。

于 2008-09-20T20:33:50.590 に答える
0

this.GetType()。Assembly.Locationとは何ですか?

于 2008-09-20T20:37:19.537 に答える
0

次のようなアセンブリと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 ...
于 2008-09-20T20:43:18.633 に答える