13

Googleで何かを見つけましたが、C#コンソールアプリケーションで機能しません

私が見つけたもの:

string appPath = Path.GetDirectoryName(Application.ExecutablePath);

c#コンソールアプリケーションを使用してアプリケーションディレクトリを取得するにはどうすればよいですか?

4

5 に答える 5

14

アプリケーションはコンソールアプリケーションでは使用できません。Windowsフォーム用です。

作業ディレクトリを取得するには、次を使用できます

Environment.CurrentDirectory

また、実行可能ファイルのディレクトリを取得するには、次を使用できます。

AppDomain.CurrentDomain.BaseDirectory
于 2012-10-13T16:50:05.203 に答える
10

それでもコンソールアプリケーションでApplication.ExecutablePathを使用する場合は、次のことを行う必要があります。

  1. System.Windows.Forms名前空間への参照を追加します
  2. 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の回答に従う必要があります。

于 2012-10-13T17:19:43.230 に答える
9

注意、パスにはいくつかのメソッドと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ディレクトリを返します。

于 2014-04-05T14:13:16.697 に答える
3

試すDirectory.GetCurrentDirectory

于 2012-10-13T16:04:46.563 に答える
0

久しぶりですが、Assembly.GetExecutingAssembly().CodeBase頑張ってくれました。あなたはそれと交換Application.ExecutablePathする必要があります。

もちろん、追加する必要がありますusing System.Reflection;

使ってみSystem.Windows.Formsましたが、例外がありました

于 2020-04-09T08:53:31.267 に答える