Googleで何かを見つけましたが、C#コンソールアプリケーションで機能しません
私が見つけたもの:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
c#コンソールアプリケーションを使用してアプリケーションディレクトリを取得するにはどうすればよいですか?
アプリケーションはコンソールアプリケーションでは使用できません。Windowsフォーム用です。
作業ディレクトリを取得するには、次を使用できます
Environment.CurrentDirectory
また、実行可能ファイルのディレクトリを取得するには、次を使用できます。
AppDomain.CurrentDomain.BaseDirectory
それでもコンソールアプリケーションでApplication.ExecutablePathを使用する場合は、次のことを行う必要があります。
System.Windows.Formsをusingsセクションに追加します
using System;
using System.IO;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string appDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Console.WriteLine(appDirectory);
}
}
}
Directory.GetCurrentDirectory()
また、代わりにを使用できるためPath.GetDirectoryName(Application.ExecutablePath)
、System.Windows.Formsへの参照は必要ありません。
System.IO
名前空間も名前空間も含めたくないSystem.Windows.Forms
場合は、Reimeusの回答に従う必要があります。
注意、パスにはいくつかのメソッドとPITFALLSがあります。
あなたはどこを求めていますか?作業ディレクトリ、.EXEディレクトリ、DLLディレクトリ?
サービスまたはコンソールアプリケーションでも機能するコードが必要ですか?
ディレクトリに一貫性のない末尾のスラッシュがある場合、コードは壊れますか?
いくつかのオプションを見てみましょう:
Application.ExecutablePath
参照を追加し、アプリケーション名前空間をロードする必要があります。
Directory.GetCurrentDirectory
Environment.CurrentDirectory
プログラムがショートカット、レジストリ、タスクマネージャーで実行されている場合、これらは「開始」フォルダーを提供します。これは、.EXEの場所とは異なる場合があります。
AppDomain.CurrentDomain.BaseDirectory
実行方法に応じて、末尾にスラッシュが含まれるかどうかが影響します。これにより問題が発生する可能性があります。たとえば、GetDirectoryName()はスラッシュをファイルと見なさず、最後の部分を削除します。
これらのいずれかが私の推奨事項であり、フォームアプリケーションとコンソールアプリケーションの両方で機能します。
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
or
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
メインプログラムで使用する場合、両方とも同一です。DLL内で使用される場合、最初はDLLをロードした.EXEディレクトリを返し、2番目はDLLディレクトリを返します。
久しぶりですが、Assembly.GetExecutingAssembly().CodeBase
頑張ってくれました。あなたはそれと交換Application.ExecutablePath
する必要があります。
もちろん、追加する必要がありますusing System.Reflection;
使ってみSystem.Windows.Forms
ましたが、例外がありました