アプリケーションフォルダのパスを取得する最良の方法

アプリケーションフォルダのパスを取得するにはいくつかの方法があるようですね。

  1. Application.StartupPath (アプリケーションのスタートアップパス
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location) 3.
  3. AppDomain.CurrentDomain.BaseDirectory 2.
  4. System.IO.Directory.GetCurrentDirectory() 3. 5.環境.CurrentDirectory5. 6.6.System.IO.Path.GetDirectoryName() System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)7. 7.7.System.IO.Path.GetDirectory(Application.ExecutablePath)` 8.

状況に応じて、どのような方法が最適でしょうか?

ソリューション

AppDomain.CurrentDomain.BaseDirectory`は、アプリケーションのインストールディレクトリからの相対的な位置にあるファイルにアクセスする際に最も便利です。

ASP.NETアプリケーションでは、binサブフォルダではなく、アプリケーションのルートディレクトリになりますが、これは通常必要なものでしょう。クライアントアプリケーションでは、メインの実行ファイルを含むディレクトリになります。

VSTO 2005アプリケーションでは、Excelの実行ファイルのパスではなく、アプリケーションのVSTOマネージドア センブリのディレクトリになります。

他の方法では、環境によって異なるディレクトリが返されるかもしれません - 例えば、@Vimvq1987'の回答を参照してください。

CodeBaseは、ファイルが見つかった場所で、http:// で始まる URL になります。この場合、Location` はおそらくアセンブリのダウンロードキャッシュになります。CodeBaseはGAC内のアセンブリに設定されていることは保証されていません。

解説 (10)

これらのメソッドのすべてが同じ値を返すわけではないことに注意してください。場合によっては同じ値を返すこともありますが、目的が違うので注意が必要です。

Application.StartupPath

StartupPath`パラメータを返します(アプリケーションの実行時に設定できます)。

System.IO.Directory.GetCurrentDirectory()

はカレントディレクトリを返しますが、これはアプリケーションが置かれているフォルダである場合もあれば、そうでない場合もあります。同じことが Environment.CurrentDirectory にも当てはまります。DLLファイルでこれを使用している場合、プロセスが実行されている場所のパスが返されます(これは特にASP.NETで当てはまります)。

解説 (3)

Webアプリケーションの場合、現在のWebアプリケーションのルートディレクトリを取得するには、通常、現在の受信リクエストのWebページを呼び出します。

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

上記コードの説明を参照してください。

解説 (0)