Pertanyaan Apa cara terbaik untuk mengganti namespace massal pada aplikasi c # besar?


Pertama, sedikit latar belakang.

Saat ini ruang nama dan rakitan dalam basis kode kami (~ 60 rakitan, ribuan kelas) tampak seperti

WidgetCompany.Department.Something

Kami sekarang telah dipisahkan sehingga kami menjual perangkat lunak yang menggerakkan WidgetCompany, jadi kami ingin mengganti nama ruang nama & rakitan

NewCompany.Something

Dalam keadaan normal, saya mungkin hanya menggunakan namespace lama, tetapi masalahnya adalah pelanggan kami tidak ingin melihat nama salah satu pesaing mereka di mana pun dalam aplikasi. Jika mereka melihat jejak stack, properti perakitan dll, seharusnya tidak muncul. Ini tidak dimaksudkan untuk menyembunyikan rekan kami atau melakukan sesuatu yang jahat, kami hanya perlu memastikan bahwa orang-orang tahu kami adalah entitas yang terpisah, manajemen terpisah, dan mereka tidak perlu khawatir tentang data yang dibagikan, dll.

Sekarang pertanyaannya. Apa cara terbaik untuk melakukan semua jenis ini dengan mengganti nama? Hal berikut perlu diubah:

  • Namespace untuk (hampir) setiap kelas dalam aplikasi
  • Setiap using pernyataan dalam aplikasi yang merujuk pada nama lama
  • Struktur folder untuk setiap proyek
  • Referensi antara proyek yang bergantung pada struktur folder yang diubah
  • .Sln file yang mereferensikan struktur folder yang diubah
  • Referensi apa pun kelas-kelas yang sepenuhnya berkualitas (harus sedikit dan jauh antara)
  • Referensi apa pun untuk itu kelas dalam file konfigurasi xml (config bagian dll)
  • File AssemblyInfo.cs untuk setiap perakitan
  • AssemblyName di setiap file .csproj

Apakah saya terjebak dengan strategi find-replace-pray atau apakah ada sesuatu yang lebih baik?


32
2018-01-26 19:42


asal


Jawaban:


Klik kanan pada namespace Anda saat ini dan pilih Refactor -> Ganti nama dan ubah nama di pop up yang muncul setelah beberapa saat. Masukkan nama baru Anda dan klik ok.

Jika Anda memiliki beberapa kedalaman untuk namespace Anda, maka Visual Studio tidak akan membiarkan Anda mengetikkan titik. Namun, jika Anda menyalin dan menempelkan titik, meskipun ada peringatan, itu akan melakukan bisnis.


31
2018-01-26 19:52



ReSharper. Dapatkan versi 5.1 dari JetBrains secara gratis selama 30 hari (lebih dari cukup waktu untuk melakukan penggantian nama Anda). Letakkan kursor pada namespace yang ingin Anda ubah dan tekan Ctrl-R dua kali (ReSharper Rename). Ini akan bekerja dengan namespace berapapun levelnya, dan mengubah penggunaan namespace ke yang baru. Namun, Anda harus mengubah setiap namespace unik dalam solusi Anda (kecuali Anda hanya pergi dengan Temukan / Ganti)


8
2018-01-26 20:20



Pertama saya akan mencoba Refactor->Rename pilihan. Tapi seperti yang disebutkan dalam komentar untuk jawaban lain, itu tidak bekerja sebaik itu (Atau saya belum menemukan cara membuatnya bekerja). Jadi saya lebih suka menggunakan skenario berikut, terutama jika Anda ingin menambahkan beberapa namespace addiotional.

1) Ganti nama ruang nama root Anda (WidgetCompany) untuk sesuatu seperti NAMESPACE_TO_BE_REPLACED menggunakan Refactor-Rename
2) Ganti NAMESPACE_TO_BE_REPLACED dengan ruang nama akhir Anda (NewCompany.WidgetSoftware) menggunakan dialog find-n-replace

Dan jangan lupa untuk mengganti nama proyek, ruang nama standar, dll.


3
2018-01-26 20:07



Jika Anda memiliki ReSharper:

  1. Proyek klik kanan, Properties. Ubah namespace Default ke yang diinginkan ruang nama.

  2. Proyek klik kanan, Refactor -> Sesuaikan Namespace untuk memperbarui semua ruangnama untuk menggunakan namespace default

Maka biarkan saja melakukan sihirnya.


2
2017-11-23 23:08



  • Buka kelas acak di [WidgetCompany.Department.Something]
  • Edit-> Cari dan Ganti-> Ganti dalam File
  • Ketik "WidgetCompany.Department.Something" di Menemukan apa daerah
  • Ketik "NewCompany.Something" di Ubah dengan daerah
  • Pilih Proyek Saat Ini di Lihat kedalam daerah.
  • Menggantikan semua

1
2017-10-24 10:17