2017-12-16 17 views
1

現在のC#ソースコードファイル、またはファイルが格納されているディレクトリへのパスを取得するにはどうすればよいですか? (私はGoogleの検索とその上に何かを見つけることができませんでしたので、私はこの質問を自分で答えています。)現在のC#ソースコードファイルへのパスを取得するにはどうすればよいですか?

注:これは、実行ファイルへのパスを与えAssembly.GetEntryAssembly().Location、もDirectory.GetCurrentDirectory()を求めていない

+0

次のようになります - それは、開発者であることのちょうど特権だ...あなた*できるだけビルドマシンからのパスを得ることができます。 –

+0

@MarcGravell良い点。ええ、これは生産コード用ではありません。コンパイルした同じマシンでコードを実行しているときだけです。 –

答えて

2

はこれを行い、どのプロセスから起動されたディレクトリを示します):。

using System.Runtime.CompilerServices; 

private static string GetThisFilePath([CallerFilePath] string path = null) 
{ 
    return path; 
} 

var path = GetThisFilePath(); // path = @"path\to\your\source\code\file.cs" 
var directory = Path.GetDirectoryName(path); // directory = @"path\to\your\source\code" 

をどのように動作します: Roslynの特別CallerFilePathCallerLineNumber、およびを認識し、アトリビュート(MVVMプログラミングをやったことがある場合は、最後のアトリビュートがよく見えます)。コンパイル時には、これらの属性でマークされたパラメータに、呼び出し元の実際のファイルパス/行番号/メンバ名が設定されます。あなたは上記のコードをコンパイルし、コンパイルした場合、pathへの割り当ては、通常、ソースコードは、* *それを実行しているマシン上ではありません

var path = GetThisFilePath(@"path\to\your\source\code\file.cs"); 
関連する問題