web-dev-qa-db-ja.com

大規模なc#アプリケーションで名前空間の名前を一括変更する最良の方法は何ですか?

まず、少し背景。

現在、コードベースのネームスペースとアセンブリ(〜60アセンブリ、数千のクラス)は次のようになります。

WidgetCompany.Department.Something

WidgetCompanyを駆動するソフトウェアを販売するようになりましたので、名前空間とアセンブリの名前を変更します

NewCompany.Something

通常の状況では、おそらく古い名前空間をそのまま使用しますが、問題は、アプリケーションのどこかに競合他社の名前を表示したくないということです。スタックトレース、アセンブリプロパティなどが表示される可能性がありますが、表示されません。これは、従業員を非表示にしたり、不吉なことをしたりするためのものではありません。別のエンティティ、別の管理者であることを人々に知らせ、データの共有について心配する必要がないことを確認する必要があります。

次に質問です。名前変更を含むこのタイプのすべてを実行する最良の方法は何ですか?以下を変更する必要があります。

  • アプリケーションの(ほぼ)すべてのクラスの名前空間
  • 古い名前を参照するアプリケーションのすべてのusingステートメント
  • 各プロジェクトのフォルダー構造
  • 変更されたフォルダー構造に依存するプロジェクト間の参照
  • 変更されたフォルダー構造を参照する.Slnファイル
  • 完全に修飾されたクラスへの参照(数が少なく、その間にある必要があります)
  • XML構成ファイル内のそれらのクラスへの参照(構成セクションなど)
  • すべてのアセンブリのAssemblyInfo.csファイル
  • すべての.csprojファイルのAssemblyName

Find-replace-pray戦略にこだわっていますか、それとももっと良いものがありますか?

38
Brook

現在のネームスペースを右クリックして、[リファクタリング]-> [名前の変更]を選択し、しばらくすると表示されるポップアップで名前を変更します。新しい名前を入力して、[OK]をクリックします。

名前空間に複数の深さがある場合、Visual Studioではドットを入力できません。ただし、ドットをコピーして貼り付けると、警告は表示されますが、機能します。

47
franklins

ReSharper。 JetBrainsからバージョン5.1を30日間無料で入手します(名前を変更するのに十分な時間です)。変更したい名前空間にカーソルを置いてヒット Ctrl-R 2回(ReSharper Rename)。ネームスペースをいくつでも深いレベルで使用し、そのネームスペースの使用を新しいネームスペースに変換します。ただし、ソリューション内のすべての一意の名前空間を変更する必要があります(検索/置換を使用する場合を除く)

9
KeithS

まず、Refactor->Renameオプションを試してみます。しかし、別の回答のコメントで述べたように、それはそれほどうまく機能しません(または、それを機能させる方法を見つけていません)。したがって、特にいくつかの追加の名前空間を追加する場合は、次のシナリオを使用することをお勧めします。

1)NAMESPACE_TO_BE_REPLACEDを使用して、ルートネームスペース(WidgetCompany)をRefactor-Renameのような名前に変更します。
2)find-n-replaceダイアログを使用して、NAMESPACE_TO_BE_REPLACEDを最終的な名前空間(NewCompany.WidgetSoftware)に置き換えます

また、プロジェクト、デフォルトの名前空間などの名前を変更することを忘れないでください。

3
Snowbear

ReSharperを使用している場合:

  1. プロジェクトを右クリックプロパティ。デフォルトの名前空間を目的の名前空間に変更します。

  2. プロジェクトを右クリックし、Refactor-> Adjust Namespaceをクリックして、すべての名前空間を更新し、デフォルトの名前空間を使用します

次に、魔法をかけてみましょう。

2
Yodacheese
  • [WidgetCompany.Department.Something]でランダムクラスを開きます
  • 編集->検索と置換->ファイル内の置換
  • FindWhatエリアに「WidgetCompany.Department.Something」と入力します
  • Replace withエリアに「NewCompany.Something」と入力します
  • 探す場所エリアで現在のプロジェクトを選択します。
  • すべて置換
1
Bora Aydın

Visual Studio 2019 Community Editionは、これを here のようにサポートしています。 (ドット、ルート名前空間の変更などを含む)あらゆる階層で機能し、すべての依存関係を正しく更新します。

  1. クラス名にカーソルを置きます

  2. プレスCtrl+.クイックアクションとリファクタリングメニューをトリガーする

  3. 選択名前空間に移動Move to namespace refactoring

  4. 開いたダイアログボックスで、タイプを移動するターゲット名前空間を選択します Select a namespace dialog box

1
DeepSpace101

既に部分的に名前を変更している場合の代替ソリューション:

  • 検索と置換(ショートカット ctrlh
  • 正規表現が選択されていることを確認します(.*のようなアイコン)
  • 現在の名前空間の完全な名前を貼り付けます。例:YourSolution.YourProject
  • この正規表現を貼り付けますYourSolution.Your[partiallyRenamedNamespaceCharacters].*
  • Entire SolutionではなくCurrent Documentが選択されていることを確認してください
  • 走る
0
TomDane