ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

C# ソリューションの基本的なファイル構成について

Visual Studio 2017 を使い始めると、新しいプロジェクトを作成した際にやたら沢山のファイル構成ができて「どれが何のファイルなの?」と混乱します。

Visual Studio 内だと、それらのファイルのデータがツリー構造で表示される「ソリューションエクスプローラー」も同様で、どれを触ればいいのか分かりません。

そこで、構成について自分が分かる範囲でメモっておきたいと思います。

基本的なファイル構成


「新しいプロジェクトを作成」で「Windows フォームアプリケーション」を選択します。

この時「ソリューションのディレクトリを作成」にチェックを入れておくと、以下のようにプロジェクト名のフォルダがトップ階層に作成され、プロジェクト名のソリューションファイルもトップ階層に置かれます。
※チェックを入れた方が構造が分かりやすいのでオススメです

試しに「test」というプロジェクトを作成してみた場合のトップ階層がこちら。

■ .vs  ‥ suoファイル(ユーザーごとのオプションファイル)がある
■ test  ‥ プログラムを構成する色んなファイルが詰まっている
test.sln ‥ ソリューションファイル(ダブルクリックでプロジェクトが開く)


そしてプロジェクト名のフォルダを開くとこんな感じ。
.cs」は C# (C Sharp) のソースファイルです。
※余談ですが「.cpp」はC++のソースファイルです 最近知りました‥

■ bin ‥ コンパイル時に実行ファイルが出力される
■ obj ‥ コンパイル時にコンパイルに必要なファイルが生成される?
■ Properties ‥ リソースファイルなどが含まれる
App.config ‥ アプリケーション設定ファイル
Form1.cs ‥ フォームの挙動を記述していくC#ファイル
Form1.Designer.cs ‥ フォームの外観が自動で記述されていく
Program.cs ‥ メイン関数(Form1.csを生成して実行する記述がある)
test.csproj ‥ プロジェクトの設定ファイル?


Visual Studio を使えば「フォームデザイナー」でボタンなどのコントロールをドラッグ&ドロップで配置していくだけで外観が作れるので、そういったレイアウトをコーディングせずに済みます。

なので、実際のコーディングは「ボタンを押した時に何を実行するか?」といった「挙動」を記述していくのが主になり、具体的には「Form1.cs」を中心にコードを記述していくことになります。

しかし、やりたいことをググるとたまに「Program.cs」に記述しないといけない場面に遭遇することもあります。

という訳で、エクスプローラー上での主な構成が分かると、Visual Studio のソリューションエクスプローラーの構成も分かってきます。初めて見た時は「なんじゃこりゃ!」って感じでした。

ソリューションエクスプローラ


Visual Studio のソリューションエクスプローラーを見るとこのような感じ。
気にするのは赤線を引いた3種類でOK。
(もちろん、フォームを新たに追加するとアイテムも増えていきます)

f:id:moko_03_25:20180808015817j:plain

Form1.cs ‥ フォームの外観。ダブルクリックで開く
Form1.Designer.cs ‥ フォームの外観のソースコードはこちら
Form1() ‥ Form1の挙動を書いていくソースコード。クリックで開く
Program.cs ‥ メイン関数のソースコード。クリックで開く 


Form1.cs を選択して開くとソースじゃなくて外観が開くっていう。なんでやねん。
Form1.csだけはダブルクリックで開く。他はクリック。なんでやねん。

こういう微妙に直感的じゃないの、すごくムズムズします‥!

f:id:moko_03_25:20180808020348j:plain

ちなみにこの外観のタブが選択されている時に F7 を押すと下図のようにフォームの挙動部分のソースコードが別のタブで開いてくれます。

Visual Studio を始めたばかりの頃は、フォームデザイナーからイベントを追加する以外でどうやってソースコードを開くのか分からなかったので、最初に覚えたいショートカットです。

f:id:moko_03_25:20180808020356j:plain

 

フォームのリネームについて


フォームデザイナーでForm1の名前(正確にはFormクラスを継承したForm1クラス?)をデフォルトの「Form1」から変えると、参照が切れないようForm1の記述を全て一括で変更してくれますが、「Form1.cs」「Form1.resx」「Form1.Designer.cs」等のファイル名までは変わらないようです。

このあたりも気持ち悪くてムズムズします。。

クラスのリネームについて


新しくクラスを追加した際に、ソリューションエクスプローラーのツリー上で直接リネームもでき、するとコード内の記述も変更してくれます。

プロジェクト名のリネームについて


あと、プロジェクト名は後から変えたいと思っても、どうやら気軽に変えられる類のものではないようです。アーティストって最初にあまりちゃんと考えずに適当にネーミングして後から変えたくなる人種なので、困ります。。