.Net 8で実行パスを取得しようとしたところ.NetFrameworkとは若干違いがあったのでメモしておきます
System.Windows.Formsが使えない
System.Windows.Formsに含まれる【Application.ExecutablePath】が使えなかったので、調べてみたら色々なやり方がありました
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0\CSharpTest.dll
Assembly.GetEntryAssembly().Location;
// 出力結果:file:\D:\work\CSharpTest\bin\Debug\net8.0
Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0\
AppDomain.CurrentDomain.BaseDirectory;
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0
Directory.GetCurrentDirectory();
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0
Directory.GetParent(Assembly.GetExecutingAssembly().Location);
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0
Environment.CurrentDirectory;
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0
Path.GetDirectoryName(Path.GetFullPath(Environment.GetCommandLineArgs()[0]));
// 出力結果:D:\work\CSharpTest\bin\Debug\net8.0
Path.GetDirectoryName(Environment.ProcessPath)
上記のコードをビルドしてExeファイルを他の階層に移動させて実行してみます
// 出力結果:D:\net8.0\CSharpTest.dll
Assembly.GetEntryAssembly().Location;
// 出力結果:file:\D:\net8.0
Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
// 出力結果:D:\net8.0\
AppDomain.CurrentDomain.BaseDirectory;
// 出力結果:D:\net8.0
Directory.GetCurrentDirectory();
// 出力結果:D:\net8.0
Directory.GetParent(Assembly.GetExecutingAssembly().Location);
// 出力結果:D:\net8.0
Environment.CurrentDirectory;
// 出力結果:D:\net8.0
Path.GetDirectoryName(Path.GetFullPath(Environment.GetCommandLineArgs()[0]));
// 出力結果:D:\net8.0
Path.GetDirectoryName(Environment.ProcessPath)
上記のようにコードは違いますが、結果は変わらないものがいくつかありました。具体的に何が違うのかよくわからなかったのですが、以下のサイトだと【AppDomain.CurrentDomain.BaseDirectry】が妥当だそうです
-
【.Net】アプリのパスを取得する方法っていくつもあるけど何か違うの?【C#】 | ドクロモエ
続きを読む