7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Visual Studio] ProjectFolderへのパスを簡単に取得する方法

Posted at

プロジェクトの中に静的ファイルとしてjsonなどのデータを含めた場合、実行ファイルがそれらのファイルにアクセスする際の相対パスがややこしくなります。
よくある例が、ビルドの構成でデフォルトでは
ProjectFolderPath/bin/Debug/MyApp.exe
に実行ファイルが生成されるのに対し、プラットフォームをx64などにすると、
ProjectFolderPath/bin/ x64 /Debug/MyApp.exe
に実行ファイルが生成されます。この場合、

var pathToJson = "../../../static/hoge.json"

と定義しても、ビルドの構成を変えたときに正しく静的ファイルにアクセスすることができません。
しかし、Enivironmentクラスを見てもProjectFolderへのパスを取得できなさそうです。
そこで、ビルド前にコマンドを実行し、ProjectFolderのパスをファイルとして出力するようにします。

1.まずはプロジェクトのプロパティを開き、ビルドイベントタブを選択します。
2.次に「ビルド前の編集」ボタンを押します。

1.PNG

3.「マクロ>>」を押します。

2.PNG

4.ビルド前に実行するコマンドラインとして、

ECHO $(ProjectDir) > $(TargetDir)ProjectDirPath.txt

を設定します。

3.PNG

5.あとは、ビルド時に実行ファイルと同じ階層に"ProjectDirPath.txt"が生成されるので、そこからProjectFolderへのパスを取得します。

string projectDirPath;
if(File.Exists("ProjectDirPath.txt")){
    using(var sr = new StreamReader("ProjectDirPath.txt")){
        projectDirPath = sr.ReadToEnd();
    }
}
var pathToJson = Path.Combine(projectDirPath, "static", "hoge.json");

ビルド前およびビルド後のコマンドライン実行は、使い方次第でかなり便利なことができるので、ガンガン使いましょう。

7
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?