web-dev-qa-db-ja.com

Visual Studio:「クラスを別の名前空間に移動する」リファクタリングはありますか?

私はいくつかのクラスを異なるプロジェクトや名前空間に移動することを含むアーキテクチャのクリーンアップを行っています。現在、私は手動でファイルを移動し、ビルドしてから、コンパイルエラーを解決するために必要に応じてFooを使用ステートメントを手動で追加しています。これを行う賢い方法を知っている人はいますか? (私たちはCodeRushとRefactor!ショップですが、Resharperがこれをサポートしてくれるかどうか聞いてみたいです)

62

Resharperは、この能力があることを知っている唯一のツールです。 CodeRushとRefactorには欠けている他の多くの機能もあります!

28
Josh

Visual Studio 2010では、名前空間の名前を変更できます。名前空間名の上にカーソルを置き、を押します F2。または、単にコードで名前を変更して、 Shift+Alt+F10、 Enter 赤い波線が表示されるのを見てから。

Reharperは 名前空間の名前を変更 もできます。見積もり:

名前空間の名前変更リファクタリングにより、ユーザーは特定の名前空間の名前を変更し、コード内の名前空間へのすべての参照を自動的に修正できます。次の使用法の名前が変更されました。

  • 名前空間ステートメント
  • ディレクティブを使用する
  • 型の修飾名
34
Darin Dimitrov

この回答は、少なくともVisual Studio 2013および2015に適用されます再シャーパーは不要

  1. クラスファイルを新しいフォルダーに移動する
  2. 「検索と置換」を開きます
  3. 「ファイルで置換」を選択します
  4. [検索対象]フィールドにoriginal名前空間定義を入力します。 MyCorp.AppStuff.Api
  5. [置換]フィールドにnew名前空間定義を入力します。 MyCorp.AppStuff.Api.Extensions
  6. [探す場所]フィールドの参照ボタンを使用して新しいフォルダを選択します ...、またはフォルダパスを入力します
  7. を押す Replace All ボタン
8
Gusdor

Visual Studio 2019は、少なくとも2つの組み込みオプションを提供します。

'Move to namespace ...' リファクタリングはどのクラスでもトリガーでき、VSはターゲットのネームスペースを要求します。

'Change namespace to ...' 現在のファイル名前空間がフォルダー構造と一致しない場合にリファクタリングが提供されます。

これは、次の方法で個々のクラスを異なるネームスペースに移動するために使用できます。

  1. 目的のフォルダー構造を作成する
  2. ファイルを移動する
  3. 言及されたリファクタリングを適用する(CTRL +。カーソルをネームスペース上に置いて)

これらの操作により、すべての参照がそれに応じて更新されます。

6
gschuager

VS 2015およびVS 2017には部分的な解決策があります、Resharperなし、無料の拡張機能を使用します。

私が今日(2017年末)気に入っている拡張機能の1つは、名前空間の修正VS拡張機能です。 https://marketplace.visualstudio.com/ items?itemName = vs-publisher-599079.FixNamespace#overview

ソリューションのフォルダー構造を分析し、それを使用して名前空間のリファクタリングを提供します。残念ながら、それは完全ではありません。依存関係をそれほど追跡しませんが、私にとって作業の大部分を解決しました。

3
Ádám Miklósi

Resharperを使用する場合: CTRL+R+O

次に、下矢印キーを2回押して、タイプを別のネームスペースに移動を選択します。

2
Marco Lackovic

上記の答えが提供されたので(推測)、この機能はCodeRushに追加されました。移動するTypeにカラットを置くだけで、リファクタリングにMove Type to Namespaceオプションが表示されます!コンテキストメニュー。これにより、タイプが新しいネームスペースに移動され、参照が更新されます。ただし、名前空間の名前と一致するソリューションフォルダーにファイルを移動することもできます。

1
nzduck

これは最良の結果ではありませんが、プラグインやツールなしで、Visual Studioでのみ実行できます。ソリューション全体、大文字と小文字の区別、単語全体の一致を検索して置換します。内容:クラス名、置換:New.Namespace.ClassName(完全修飾クラス名)。

移動されたクラスおよび古い名前空間にある他のクラスの100以上の参照が移動されていない場合、これが唯一の絶対確実で無料のソリューションです。エラーが発生する唯一のケースは、他のネームスペースに同じクラス名がある場合です。

0
user3285954

Re $ harperを使用できない場合、または使用しない場合は、Notepad ++がお友達です。

  1. Visual Studio内に保存された変更がないことを確認してください、新しい名前空間に移動する必要があるファイルに対して
  2. すべて開く Notepad ++で変更する必要があるネームスペースを含むファイル
  3. 開いた Find & Replace (CTRL + H)
  4. Find whatとReplace withフィールドに入力します
  5. 押す Replace All in All Opened Documents
  6. すべて保存すべてのドキュメントの変更(CTRL + SHIFT + S)
  7. Visual Studioに切り替えて、reloadすべてのドキュメント(Yes to all プロンプトで)

[〜#〜] done [〜#〜]

0
Sergio