1. ホーム
  2. c#

[解決済み] アプリケーションフォルダのパスを取得する最適な方法

2022-03-17 02:06:57

質問

アプリケーションフォルダのパスを取得する方法があるようですが、どのようにすればよいですか?

  1. Application.StartupPath
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
  3. AppDomain.CurrentDomain.BaseDirectory
  4. System.IO.Directory.GetCurrentDirectory()
  5. Environment.CurrentDirectory
  6. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

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

解決方法は?

AppDomain.CurrentDomain.BaseDirectory は、アプリケーションのインストールディレクトリから相対的な場所にあるファイルにアクセスするのに一番便利でしょう。

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

VSTO 2005アプリケーションでは、アプリケーションのVSTOマネージド・アセンブリを含むディレクトリとなり、例えばExcel実行ファイルへのパスではありません。

その他は、環境に応じて異なるディレクトリを返すかもしれません。例えば、@Vimvq1987 の回答を参照してください。

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

アップデイト 最近(.NET Core、.NET Standard 1.3+ または .NET Framework 4.6+)は、.NET Framework 4.6+を使用する方がよいでしょう。 AppContext.BaseDirectory よりも AppDomain.CurrentDomain.BaseDirectory . どちらも等価ですが 複数のAppDomainはサポートされなくなりました .