bagaimana cara mengubah namespace dari seluruh proyek?

104

Saya memodifikasi aplikasi demo dari artikel ini: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Saya perlu memperbarui semua file untuk menggunakan namespace saya, misalnya sekarang file terletak di sini:

MySolution\MyApp\DemoApp\ViewModel\MainWindowViewModel.cs

menggunakan namespace seperti itu:

namespace DemoApp.ViewModel
{
/// <summary>
/// The ViewModel for the application's main window.
/// </summary>
public class MainWindowViewModel : WorkspaceViewModel

Saya perlu memindahkan file di sini (hapus folder DemoApp):

MySolution\MyApp\ViewModel\MainWindowViewModel.cs

dan juga menggunakan namespace yang benar:

namespace MyApp.ViewModel
{
....

bagaimana melakukannya di visual studio 2010?

Perbarui ok di sini adalah mungkin duplikat Ubah Namespace Proyek di Visual Studio Sekarang saya tahu cara mengubah namespace proyek, tetapi bagaimana cara memindahkan file pada sistem file? (hapus folder "DemoApp")

javapowered
sumber
4
Sama seperti FYI, Anda tidak perlu ruang nama untuk mencocokkan struktur folder di .NET, itu tidak diperlukan.
James Michael Hare
1
Seperti yang dikatakan James, itu tidak wajib .. tapi saya akan mempertanyakan mengapa seseorang tidak "menyelesaikan pekerjaan" pada aplikasi yang perlu saya kerjakan.
NotMe
1
Mengenai memindahkan file .. Um, potong / tempel dan seret / lepas biasanya bekerja dalam manajer solusi studio visual .. atau bahkan hanya mengganti nama folder atau menghapus. tergantung pada apa yang sebenarnya Anda coba lakukan.
NotMe

Jawaban:

124

Saya membayangkan Replace in Files ( Ctrl+ Shift+ H) sederhana akan cukup berhasil; cukup ganti namespace DemoAppdengan namespace MyApp. Setelah itu, buat solusi dan cari kesalahan kompilasi untuk pengenal yang tidak dikenal. Apa pun yang sepenuhnya memenuhi syarat DemoAppperlu diubah menjadi MyApp.

Adam Maras
sumber
62
Penting; ubah juga ruang nama default di properti-proyek; ini mengontrol namespace untuk hal-hal seperti resx
Marc Gravell
Saya memiliki beberapa file XAML yang mewakili jendela WPF, jadi ini tidak akan berhasil untuk saya.
Pieter
6
Anda juga harus menjalankan Ganti pada usingpernyataan apa pun yang akan diubah using DemoAppmenjadi using Myapp.
swbandit
5
juga ganti nama <add namespace = "OldNameSpace" /> di semua file web.config di folder views
neo112
@Pieter Anda harus dapat melakukan replace semua untuk seluruh aplikasi, diikuti dengan pembaruan di properti seperti yang disarankan Marc, lalu tutup solusi dan buka lagi jika VS memiliki perilaku yang tidak dapat dijelaskan dengan beberapa penyelesaian otomatis.
Eric
153

Pergi ke suatu tempat namespace dideklarasikan di salah satu file Anda. Letakkan kursor di bagian namespace yang ingin Anda ubah, dan tekan F2. Ini harus mengganti nama namespace di setiap file. Setidaknya, ini berhasil dalam proyek demo kecil yang saya buat untuk menguji jawaban ini!

Bergantung pada versi VS Anda, pintasannya mungkin juga Ctrl- R, Ctrl- R.

Amy
sumber
1
oleh beberapa alasan tidak berhasil untuk saya. Saya menekan F2 dan tidak ada yang terjadi.
javapowered
6
@javapowered, maka tombol pintas Anda telah disesuaikan. Lihat opsi VS untuk Anda. Hari ini milik saya adalah CTRL-R CTRL-R.
Amy
4
Catatan: Meskipun saya masih lebih suka metode ini, [dapat dimengerti] gagal menggantikan referensi dalam views dan di file web.config yang terdapat dalam direktori Views /. Perhatikan saja itu.
Wiseguy
3
Untuk versi yang seharusnya tidak bergantung pada perubahan hotkey, cukup klik kanan nama namespace dan pilih rename.
Kat
3
Sayangnya ini tidak berfungsi jika Anda ingin nama baru menyertakan .karakter.
Botond Balázs
27

Cukup klik kanan solusinya, buka properti, ubah "namespace default" di bawah bagian 'Aplikasi'.

masukkan deskripsi gambar di sini

Anuja Lamahewa
sumber
3
Apakah itu mengubah namespace di file yang ada?
Priyesh Kumar
5
Tidak, tidak akan.
Anuja Lamahewa
3

Ctrl+ Shift+ Hbukan solusi sebenarnya.

Anda dapat menggunakan Resharper untuk mengubah semua definisi ruang nama dalam solusi Anda. Ini adalah cara terbaik yang pernah saya coba sebelumnya.

https://www.jetbrains.com/resharper/features/code_refactoring.html

Selçuk Ermaya
sumber
2
resharper membutuhkan mesin desktop yang sangat mahal
Ivan G.
@Rumahguguk. Yah, banyak proyek komersial membutuhkan pengembang mahal yang sangat besar juga, jadi mesin dan lisensi R # tidak terlalu mahal dalam skema yang lebih besar;) Jika Anda perlu memeriksa apakah metode ini (atau Adam atau Amy) telah bekerja dengan benar , Anda dapat melihat Temukan Masalah Kode
StuartLC
1
@StuartLC sayangnya hari-hari tempat kerja khusus dan desktop besar telah berlalu, saya menggunakan laptop yang sangat kuat untuk pengembangan saya, dan resharper praktis membunuhnya, jadi saya tidak akan merekomendasikannya kepada siapa pun yang menghargai waktu.
Ivan G.
Teman-teman yang dapat Anda gunakan untuk mengganti nama secara gratis, Anda tahu :-) Instal aktifkan versi uji coba gratis, ubah namanya, dan hapus instalannya jika Anda mau ;-)
Selçuk Ermaya
1

Saya telah melalui struktur folder dengan alat yang disebut BareGrep untuk memastikan saya mendapatkan semua perubahan namespace. Ini adalah alat gratis yang memungkinkan Anda mencari file dalam struktur file yang ditentukan.

Michael Murphy
sumber
file cocok dengan REGEX: (.exe) | (.dll) | (.cache) | (.pdb) lalu balikkan kecocokan . ulangi pola ini untuk mengecualikan binari lain dan sebagainya.
twobob
1

Anda dapat menggunakan ReSharper untuk pemfaktoran ulang namespace. Ini akan memberikan uji coba gratis selama 30 hari. Ini akan mengubah namesapce sesuai struktur folder.

Langkah:

1) Klik kanan pada proyek / folder / file yang ingin Anda refactor.

2) Jika Anda telah menginstal ReSharper maka Anda akan mendapatkan opsi Refactor-> Adjust Namespaces .... Jadi klik ini.

masukkan deskripsi gambar di sini

Ini secara otomatis akan mengubah ruang nama dari semua file yang dipilih.

chindirala sampath kumar
sumber
Terima kasih .. Saya bisa melakukan ini.
sgowd
0

Saya mencoba segalanya tetapi saya menemukan solusi yang benar-benar berfungsi. Ini menciptakan solusi independen dengan nama namespace baru dan seterusnya.

  1. Dalam bentuk utama temukan nama namespace -> klik kanan -> Refactor -> Ubah nama dan pilih nama baru. Centang semua kotak dan klik OK.

  2. Di explorer solusi, ganti nama solusi menjadi nama baru.

  3. Di explorer solusi, ubah nama proyek menjadi nama baru.

  4. Tutup VS dan ganti nama folder (dalam komandan total misalnya) di folder solusi ke nama baru.

  5. Dalam file .sln ganti nama lama menjadi nama baru.

  6. Hapus file .suo lama (tersembunyi)

  7. Mulai VS dan muat proyek

  8. Proyek -> properti -> ubah nama Majelis dan namespace default ke nama baru.

Maros
sumber
0

Saya tahu ini cukup terlambat tetapi bagi siapa pun yang ingin melakukannya mulai sekarang, saya harap jawaban ini membuktikan beberapa bantuan. Jika Anda telah menginstal CodeRush Express( versi gratis , dan 'harus'), ia menawarkan cara sederhana untuk mengubah namespace lebar proyek. Anda cukup menempatkan kursor pada namespace yang ingin Anda ubah dan itu akan menampilkan smart tag(kotak biru kecil) di bawah namespacestring. Anda dapat mengklik kotak itu atau menekan Ctrl +tombol untuk melihat Renameopsi. Pilih dan kemudian ketik nama baru untuk ruang nama lebar proyek, klik Applydan pilih tempat mana dalam proyek Anda yang ingin Anda ubah, di dialog baru dan OKitu. Selesai! :-)

Kunal
sumber
Dalam pengalaman saya, CodeRush Express bukanlah 'harus memiliki' (pendapat pribadi). Ini berguna untuk hal-hal seperti ini.
Maarten
0

Ketika saya ingin mengubah namespace dan nama solusi saya lakukan sebagai berikut:
1) mengubah namespace dengan memilih dan mengganti namanya dan saya melakukan hal yang sama dengan nama solusi
2) mengklik bola lampu dan mengganti nama semua contoh namespace lama
3 ) menghapus semua proyek dari solusi
4) menutup studio visual
5) mengganti nama semua proyek di windows explorer
6) membuka studio visual dan menambahkan semua proyek lagi
7) mengganti nama ruang nama di semua proyek di propertinya
8) menghapus folder bin ( dari semua proyek)
9) membangun proyek lagi

Itu berhasil untuk saya tanpa masalah dan proyek saya memiliki kontrol sumber yang baik. Semuanya baik-baik saja setelah mendorong perubahan itu ke remote.

przemas
sumber