はじめに
Visual Studioのプロジェクトを分けて階層型のアーキテクチャにするといろいろメリットがありますよという説明をしました。
それでプロジェクトを増やすわけですが、あるあるなのがプロジェクト名を変えたいというケース。
実は、Visual Studioでプロジェクト名を変えるには少しコツが必要です。なのでまとめてみました。
プロジェクト名を変更するとどうなるか
プロジェクト名を変更すると、どのような状態になるのか理解しておくために、ちょっとした実験をしてみましょう。
以前「【App. Design】プロジェクトを分け階層型のアーキテクチャにする」で紹介したプログラムに少し変更を加えてみます。
実験の準備として、「Domain」プロジェクトの配下に「Test」フォルダを作り、その中に「Class1.cs」を作ってみます。
ここで、中身を確認してみます。
上が「ソリューション・エクスプローラ」で表示した内容、下が「ファイル・エクスプローラ」で表示した内容です。
上の「ソリューション」「プロジェクト」「フォルダ」の名前が、下の「フォルダ」の名前ときれいに一致しています。「Model.cs」などファイルの名前も一致しています。
画像には写っていませんが先程作成した「Class1.cs」も、「Test」フォルダの中にあり、名前も一致しています。
では、実験開始。
「ソリューション・エクスプローラ」で「ソリューション」「プロジェクト」「フォルダ」の名前を変更してみましょう。それぞれ名前の後ろに「_new」とつけてみましょう。
ただし、「App.xaml」と「App.xaml.cs」は、そのままにします。変えるとプログラムが壊れるので変えません。
さてどうなるか。
名前が連動して変わっているようにですが、よく見ると、「ファイル・エクスプローラ」の表示では「ソリューション」と「プロジェクト」に対応するフォルダの名前が変わっていません。
その他は、名前が変わっています。
画像には写っていませんが先程作成した「Class1.cs」も、「Class1_new.cs」に変わっています。
さらなる実験。
「Domain」プロジェクトを削除してみます。
すると、「ソリューション・エクスプローラ」で確認すると削除されているのに、「ファイル・エクスプローラ」で確認すると削除されていないということが、分かります。
ここで、「ソリューション・エクスプローラ」から「Domain」という名前でプロジェクトを新規で追加しようとすると「既に存在しているのでできない」というエラーになります。
また、Visual Studioが稼働中に「ファイル・エクスプローラ」でフォルダ名を変更すると、後でビルド時にエラーにはなりますが、変更そのものはできてしまう。
変更したままビルドすると「ソリューション・エクスプローラ」からファイルの表示が消える。
など、あなり混乱しそうです。
けっこうクセがありますね。
プロジェクト名を変更するオススメの方法
プロジェクト名を安易に変更するのは、やめた方が良さそうです。
プロジェクト名を変更するオススメの方法は、それは、直接変更ではなく、追加&削除です。
具体的には、次のような手順です。
- 「ソリューション・エクスプローラ」で新しいプロジェクトを追加する
- 古いプロジェクトから新しいプロジェクトへ内部のファイルを移動する
- 必要に応じて、次のような改訂を行う
- 旧プロジェクトが「スタートアッププロジェクト」の場合、ソリューションのプロパティで「スタートアッププロジェクト」を新しいプロジェクトに変更
- 旧プロジェクトが他に依存している場合、新プロジェクトの方にも同様の依存関係を追加
- 各ファイルの「Using ディレクティブ」と「NameSpace」の指定を、新しいプロジェクトに変更
- Xamlファイルの「Window Class」と「clr-namespace」の指定を、新しいプロジェクトに変更
- 古いプロジェクトを削除する
- 「ファイル・エクスプローラ」で古いプロジェクトのフォルダを削除する
ちなみに「ソリューション」のフォルダ名の方は、Visual Studioでソリューションを開いていると変更できません。Visual Studioを閉じて「ファイル・エクスプローラ」でフォルダを同じ名前に変更れば問題は起こりません。
まとめ
Visual Studioの「プロジェクト名」を変更する場合には、注意が必要です。
安易に変更すると「ソリューション・エクスプローラ」と「ファイル・エクスプローラ」でフォルダ名の対応が崩れます。崩れたままでもプログラムの動作に問題はありませんが、後になってメンテナンスをする場合に混乱を招く可能性があります。
プロジェクト名を変更するオススメの方法は、直接変更ではなく、追加&削除です。
コメント