プロジェクト名やソリューション名を変更するには?:.NET TIPS
既存のソリューションやプロジェクト、それらに付随して決定するフォルダ名やアセンブリ名、名前空間名を変更する方法と、その際の注意点を説明する。
Visual Studioのソリューションやプロジェクトの名前を変えたいことがある。例えば、開発スタート時には適当な名前を付けていたが正式な呼称が決まったとか、ソリューションやプロジェクトをコピーして名前を変えて使いたいといったような場合だ。本稿では、ソリューションやプロジェクトの名称変更の方法を、3種類に分けて解説する。
特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。
プロジェクト名やソリューション名を変更するとは?(概要)
ひと口に「プロジェクト名やソリューション名を変える」といっても、その変えたい対象によって大きく次のような3種類に分けられる。以降では、それぞれに分けて説明していく。
Visual Studioのソリューションエクスプローラに表示される名前を変えるのは簡単だ。ソリューションエクスプローラ上だけで作業が完結する。
プロジェクトやソリューションが格納されているフォルダの名前を変えるのは、ちょっと面倒だ。エクスプローラ(または、ソースコード管理システム)を使ってフォルダ名を変更し、影響を受けるソリューションファイル/プロジェクトファイルをテキストエディタで編集する。
プロジェクト名/ソリューション名の変更に合わせてアセンブリ名や名前空間を変えるには、プロジェクトのプロパティを修正するとともに、既存のコード中の名前空間も変更する。
ソリューションエクスプローラ上の名前を変えるには?
名前を変更したいソリューション/プロジェクトをVisual Studioのソリューションエクスプローラ上で右クリックし、そのコンテキストメニューで[名前の変更]を選び、新しい名前を付ける。あるいは、ソリューションエクスプローラ上でソリューション/プロジェクトを選択した状態にしてから、[F2]キーを押すかもう一度クリックすることでも名前を変更できる。
この操作で変更されるもの
- ソリューションファイル(.sln)の名前/プロジェクトファイル(.csproj/.vbprojなど)の名前
- 同じソリューションの中で、名前を変更したプロジェクトを参照しているところ。具体的には、ソリューションファイルの内容と、(もしあれば)そのプロジェクトを参照しているプロジェクトのプロジェクトファイルの内容がメモリ上で書き換えられる(実際にファイルが書き換わるのは次にソリューション/プロジェクトを保存したとき)
この操作では変更されないもの
- ソリューション/プロジェクトを置いているフォルダ名
- ソリューション名/プロジェクト名を使っているアセンブリ名/名前空間
- 名前を変更したプロジェクトを別のソリューションにも含めていた場合、そちらのソリューションには反映されない(対応するには、そのソリューションで、名称変更前のプロジェクトの削除と名称変更後のプロジェクトの追加を行うか、ソリューションファイルを直接編集する)
例えば、とあるソリューションに「ClassLibrary1」というプロジェクトと、それを参照している「WpfApp1」というプロジェクトがあったとしよう。上記のようにしてプロジェクト名「ClassLibrary1」を「ClassLibrary2」に変更すると、「WpfApp1」プロジェクトの参照も自動的に修正される(次の画像)。
ソリューションエクスプローラ上でプロジェクト名を変更する(Visual Studio 2017)
上:プロジェクト名「ClassLibrary1」を書き換えているところ
下:変更後。「WpfApp1」プロジェクトから「ClassLibrary1」プロジェクトへの参照も、自動的に「ClassLibrary2」に修正されている(赤枠内)
プロジェクトやソリューションのフォルダ名を変えるには?
この作業は、Visual Studioでソリューションを開いていない状態で行う。フォルダ名を変更し、ソリューションファイルや関連するプロジェクトファイルをテキストエディタで編集する。
まずフォルダ名の変更だが、何らかのソースコード管理システム(ソースコードリポジトリ)を使っている場合は、その方法に従う。例えば、TFS(Team Foundation Server)などのTFVC(Team Foundation Version Control)では、ソース管理エクスプローラ上でフォルダ名をリネームする。あるいは、Gitではmvコマンドを使用する。ソースコード管理システム外でエクスプローラなどを使ってフォルダ名を直接変更してしまうと、ソースコード管理システムは名前変更ではなくフォルダの削除と追加が行われたと認識するので注意しよう。
ソースコード管理システムを使っていない場合は、エクスプローラなどでフォルダ名を直接変更すればよい。
フォルダ名を変更したら、その変更をソリューションファイルなどに反映させる必要がある。
フォルダ名を変更したときには、ソリューションファイル(.sln)の修正も必須である。例えば、プロジェクトファイル「ClassLibrary2.csproj」を置いている「ClassLibrary1」フォルダを「ClassLibrary2」にリネームした場合、ソリューションファイルをメモ帳などのテキストエディタで開いて、パスに含まれる「ClassLibrary1」の部分だけを探して「ClassLibrary2」に置き換える(次の画像)。パス以外にも同じ名前があるかもしれないので、十分に注意して作業してほしい。
ソリューションファイル内でプロジェクトのパスを変更する(メモ帳)
「ClassLibrary1」フォルダを「ClassLibrary2」にリネームしたら、ソリューションファイル内のパスも同じように修正する。この例では、赤枠内の「ClassLibrary1」を「ClassLibrary2」に書き換える。
次に、フォルダ名を変更したプロジェクトを他のプロジェクトから参照している場合は、参照している側のプロジェクトファイル(.csproj/.vbprojなど)も修正する。例えば、「WpfApp1」というプロジェクトが上の「ClassLibrary2」プロジェクトを参照しているならば、「WpfApp1」のプロジェクトファイル中のパスを(ソリューションファイルと同様に)修正する(次の画像)。やはりパス以外にも同じ名前があるかもしれないので、十分に注意して作業してほしい。
参照しているプロジェクトファイル内でもプロジェクトのパスを変更する(メモ帳)
「ClassLibrary1」フォルダを「ClassLibrary2」にリネームしたら、そのプロジェクトを参照しているプロジェクトファイル内のパスも同じように修正する。この例では、赤枠内の「ClassLibrary1」を「ClassLibrary2」に書き換える。
なお、プロジェクト配下のサブフォルダの名前や構成を変更するのは、Visual Studioのソリューションエクスプローラ上で行えばよい。プロジェクトファイル内の修正は自動的に行われる。
また、ソリューションを置いているフォルダ名の変更は、ソースコード管理システムを使っている場合は、その方法に従う。そうでなければ、Visual Studioを閉じておいて、エクスプローラでフォルダ名を変更するだけだ。
アセンブリ名や名前空間名を変えるには?
プロジェクト名を変更したら、それに合わせて、出力されるアセンブリ(.dll/.exe)の名前や、コード内で使っている名前空間も変更したいだろう。アセンブリ名と既定の名前空間は、プロジェクトのプロパティページで変更する。既存コード中の名前空間は、コード内でリファクタリングする。
まずアセンブリ名と既定の名前空間であるが、Visual Studioのソリューションエクスプローラで変更したいプロジェクトを右クリックし、そのコンテキストメニューで[プロパティ]を選ぶと、プロジェクトのプロパティ設定ページが表示される(次の画像)。ここでアセンブリ名と既定の名前空間を変更すればよい。
なお、ソリューションエクスプローラでプロジェクト名を変更したときに、連動してアセンブリ名と既定の名前空間も変更されるプロジェクトもあるようだ。Visual Studio 2017 15.6.5では、.NET CoreのコンソールアプリやXamarin.Formsの共有クラスライブラリ(.NET Standard 2.0のもの)などがそのような挙動を示した。
既存コード中の名前空間は、Visual Studioのリファクタリング機能を使って変更する(Visual Studio 2005以降)。まず適当な既存コードを開き、変更したい名前空間にカーソルを置く。続いてVisual Studio 2015やVisual Studio 2017では、[F2]キーを押してから名前空間を書き換える(次の画像)。
リファクタリング機能を使って名前空間を書き換える(Visual Studio 2017)
名前空間名「WpfApp1」の中にカーソルを置いた状態で[F2]キーを押したところ。緑色になっている部分が、名前の変更リファクタリングの対象部分だ。その中を書き換えて[Enter]キーを押すと、ソリューション内の他のファイルも一斉に変更される。なお、この画像にあるように[プレビューの変更](「Preview changes」=「変更をプレビューする」の誤訳)にチェックを入れておくと、[Enter]キーを押したときに修正内容を一覧できるプレビューダイアログが出る。
それ以前のVisual Studioでは、コード中の名前空間にカーソルを置いたら、右クリックメニューで[リファクター]−[名前の変更]を選ぶか、[Ctrl+R,R]キー([Ctrl]キーを押しながら[R]キーを2回)で出てくる[名前の変更]ダイアログで名前空間を書き換える(次の画像)。
リファクタリング機能を使って名前空間を書き換える(Visual Studio 2012)
名前空間名「WpfApplication1」の中にカーソルを置いた状態で[Ctrl+R,R]キーを押したところ。このように[名前の変更]ダイアログが出てくるので、[新しい名前]欄の名前空間名を書き換えてから[OK]ボタンをクリックすると、ソリューション内の他のファイルも一斉に変更される。この画像にあるように[参照の変更のプレビュー]にチェックを入れておくと、[OK]ボタンをクリックしたときに修正内容を一覧できるプレビューダイアログが出る。
なお、この方法で既定の名前空間と同じ名前空間名を変更したときは、既定の名前空間も変更されるようだ。
最後に、リファクタリング機能から漏れてしまって変更されなかった名前空間があるといけないので、ソリューション内の全ファイルを対象に検索を行う(次の画像)。もしもこれで変更すべき箇所が見つかった場合は、手作業で修正する。
ソリューション全体を対象に旧プロジェクト名を検索する(Visual Studio 2017)
メニューバーから[編集]−[検索と置換]−[フォルダーを指定して検索]を選ぶと、この[検索と置換]ダイアログが出てくる。[検索する文字列]欄に以前のプロジェクト名を入れ、[検索対象]は[ソリューション全体]とし、[単語単位]オプションにチェックを入れ、[すべて検索]ボタンで全てを検索する。
リファクタリング機能で変更されなかった名前空間名があれば、これで見つかる。また、プロジェクトによってさまざまだが、アセンブリ属性やパッケージ名などプロジェクト名に合わせておく方がよい記述もこれで見つけられる。
まとめ
ソリューション名/プロジェクト名の変更を3種類に分けて説明した。中でもプロジェクトを置いたフォルダ名の変更は繊細な作業である。十分に気を付けて行ってほしい。作業を始める前に、ソリューションを丸ごとコピーしておくか、ソースコードリポジトリにコミットしておくと安心だ。
利用可能バージョン:Visual Studio 2005以降
カテゴリ:Visual Studio 処理対象:プロジェクト
カテゴリ:Visual Studio 処理対象:IDE
関連TIPS:Visual Studio 2005の既定のプロジェクト・フォルダを変更するには?
関連TIPS:複数のプロジェクトでファイルを共有するには?
Copyright© Digital Advantage Corp. All Rights Reserved.