アプリケーション フォルダーのパスを取得する方法はいくつかあるようです。
Application.StartupPath
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.GetCurrentDirectory()
Environment.CurrentDirectory
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
System.IO.Path.GetDirectory(Application.ExecutablePath)
状況に応じて最適な方法は何ですか?
ベストアンサー1
AppDomain.CurrentDomain.BaseDirectory
おそらく、アプリケーションのインストール ディレクトリを基準とした場所にあるファイルにアクセスする場合に最も便利です。
ASP.NET アプリケーションでは、これはアプリケーションのルート ディレクトリであり、通常は必要な bin サブフォルダーではありません。クライアント アプリケーションでは、メインの実行可能ファイルを含むディレクトリになります。
VSTO 2005 アプリケーションでは、これは Excel 実行可能ファイルへのパスではなく、アプリケーションの VSTO マネージ アセンブリを含むディレクトリになります。
その他は、環境に応じて異なるディレクトリを返す場合があります。たとえば、@Vimvq1987 の回答を参照してください。
CodeBase
ファイルが見つかった場所であり、http://で始まるURLである可能性があります。その場合、Location
アセンブリのダウンロードキャッシュである可能性があります。CodeBaseは、アセンブリに対して設定されるとは限りません。ギャック。
更新最近では(.NET Core、.NET Standard 1.3+、または.NET Framework 4.6+)、AppContext.BaseDirectory
ではなくを使用する方が適切ですAppDomain.CurrentDomain.BaseDirectory
。どちらも同等ですが、複数の AppDomain はサポートされなくなりました。