Cara yang tepat untuk mengubah nama solusi (dan direktori) di Visual Studio

415

Saya memiliki solusi Visual Studio yang agak terlibat (2010, tetapi seharusnya tidak masalah) yang harus saya ganti namanya.

Saya ingin mengganti nama folder agar sesuai dengan nama solusi yang baru, tetapi saya tidak dapat menemukan cara untuk memperbaiki nama folder secara otomatis, dan memeriksa setiap file proyek akan terasa menyakitkan.

Apakah ada cara resmi untuk melakukan ini? Atau (dan lebih tidak disukai), apakah ada alat gratis untuk mencapai ini?

David Pfeffer
sumber
13
Bagaimana ini duplikat? Dia meminta ganti nama solusi bukan proyek!
Viking

Jawaban:

375

Edit file .sln secara manual

Metode ini sepenuhnya bertujuan mengubah nama direktori untuk proyek, seperti yang dilihat di Windows Explorer.

Metode ini tidak mengalami masalah dalam metode Hapus / tambahkan file proyek di bawah ini (referensi menghilang), tetapi dapat mengakibatkan masalah jika proyek Anda di bawah kendali sumber (lihat catatan di bawah). Inilah sebabnya mengapa langkah 2 (cadangan) sangat penting.

  1. Tutup Visual Studio.
  2. Buat cadangan file .sln Anda (Anda selalu dapat memutar kembali).
  3. Bayangkan Anda ingin mengganti nama direktori Project1menjadi Project2.
  4. Jika tidak menggunakan kontrol sumber, ubah nama folder dari Project1menjadi Project2menggunakan Windows Explorer.
  5. Jika menggunakan kontrol sumber, ubah nama folder dari Project1menjadi Project2menggunakan fungsi yang disediakan oleh kontrol sumber. Ini mempertahankan sejarah file. Misalnya, dengan TortoiseSVN, klik kanan pada file, pilih TortoiseSVN .. Rename.
  6. Di file .sln, edit semua instance Project1menjadi Project2, menggunakan editor teks seperti NotePad .
  7. Mulai ulang Visual Studio, dan semuanya akan berfungsi seperti sebelumnya, tetapi dengan proyek di direktori yang berbeda.

Anda juga dapat melihat mengubah nama solusi secara manual atau memposting yang menjelaskan proses manual ini .

Keuntungan

  • Anda dapat membuat direktori dalam Windows Explorer cocok dengan nama proyek dalam solusi.
  • Metode ini tidak menghapus referensi dari proyek lain ke file ini (keuntungan dari metode Hapus / tambahkan file proyek , lihat jawaban saya yang lain di bawah).

Peringatan

  • Sangat penting untuk mencadangkan semuanya menjadi file .zip sebelum mengganti nama apa pun, karena metode ini dapat membuat masalah dengan kontrol sumber.
  • Jika proyek Anda berada di bawah kendali sumber, itu dapat menimbulkan masalah jika Anda mengganti nama file atau direktori di luar kendali sumber (menggunakan Windows Explorer). Lebih baik untuk mengganti nama file menggunakan kerangka kontrol sumber itu sendiri , jika Anda bisa, untuk mempertahankan sejarah file itu (lihat menu konteks pada klik kanan - ini mungkin memiliki fungsi untuk mengubah nama file).

Pembaruan 2014-11-02

ReSharper telah menambahkan metode otomatis untuk mencapai hasil yang sama dengan metode manual di atas. Jika namespace digarisbawahi dengan garis biru berlekuk-lekuk, klik ikon aksi piramida untuk:

  • Ganti nama namespace agar cocok dengan nama direktori di Windows Explorer, atau;
  • Ganti nama direktori di Windows Explorer agar sesuai dengan namespace.

Dalam kasus kedua, kata terakhir mendefinisikan nama direktori baru di Windows Explorer, misalnya jika kita mengubah namespace ViewModel2, itu akan menawarkan untuk memindahkan file ke folder ViewModel2.

Namun, ini tidak harus memperbarui file dalam kontrol sumber, jadi Anda mungkin masih harus menggunakan metode manual.

masukkan deskripsi gambar di sini

Perbarui 2018-01-31

Diuji dengan Visual Studio 2008, 2010, 2012, 2013, 2015, 2017 Pembaruan 1, 2, 3, 4, 5.

Perbarui 2020-05-02

Diuji dengan Visual Studio 2019.

Contango
sumber
2
catatan: bahkan dengan VS2012 perlu untuk me-restart karena jika tidak dapat menjadi bingung dan Anda mendapatkan kesalahan bodoh
Simon_Weaver
1
"Jika Anda memiliki kontrol sumber, Anda akan kehilangan riwayat file" ini sedikit merugikan bagi kami (audit dll) apakah ada rute yang disarankan sambil mempertahankan sejarah?
dougajmcdonald
23
Visual Studio adalah program yang sangat kuat, tetapi fitur ini tidak termasuk? wow ..
Luca Steeb
2
Bahkan setelah mengikuti solusi yang dijelaskan oleh @Contango, saya masih mendapatkan kesalahan: Atribut OwinStartup ditemukan di assembly ... memulai nama baru yang bertentangan dengan nama lama. Saya memeriksa folder obj dan bin dan menghapus file apa pun dengan nama lama, membiarkan yang lainnya tetap utuh. Restart vs dengan proyek saya yang baru bernama dan itu berjalan seperti pesona! Terima kasih!
nocturns2
2
@ LucaSteeb Yup, kabarnya tahun 2012 adalah sekitar 50 juta baris kode. #monolithic
Chiramisu
158

Berikut langkah-langkah yang perlu Anda ikuti untuk mengganti nama solusi:

  1. Di Solution Explorer, klik kanan proyek, pilih Ubah nama, dan masukkan nama baru.
  2. Di Solution Explorer, klik kanan proyek dan pilih Properties. Pada tab Aplikasi, ubah "Nama perakitan" dan "Ruang nama default".
  3. Di file cs utama (atau file kode lainnya), ganti nama deklarasi namespace untuk menggunakan nama baru. Untuk ini klik kanan namespace dan pilih Refactor> Ubah nama masukkan nama baru. Sebagai contoh: namespace WindowsFormsApplication1
  4. Ubah AssemblyTitle dan AssemblyProduct di Properties / AssemblyInfo.cs.

    [assembly: AssemblyTitle("New Name Here")]
    [assembly: AssemblyDescription("")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("New Name Here")]
    [assembly: AssemblyCopyright("Copyright ©  2013")]
    [assembly: AssemblyTrademark("")]
    [assembly: AssemblyCulture("")]
    
  5. Hapus direktori bin dan obj secara fisik.

  6. Ganti nama direktori folder fisik proyek.

  7. Buka file SLN (dalam notepad atau editor apa pun) dan ubah jalur ke proyek.

  8. Bersihkan dan Bangun kembali proyek.

Zaheer Ahmed
sumber
1
Ini bekerja dengan sempurna! Tetapi Anda perlu mengelola Datasetsecara manual (jika Anda telah melekat pada proyek Anda).
Sujith HS
2
Bekerja! Saya juga harus mengganti nama file .sln dan .suo. Dan saya menemukan langkah 4 sudah diselesaikan oleh salah satu langkah sebelumnya di VS 2010 saya
Patches
3
Saya agak bingung apakah Anda merujuk pada Solusi atau Proyek di langkah 1. Saya ingin mengganti nama keduanya, masing-masing dengan nama yang berbeda. Apa yang akan menjadi namespace baru, nama Solusi baru atau nama Proyek? Terima kasih telah menjelaskan ini untuk saya.
Alan Fisher
1
Ini bekerja untuk saya juga (menggunakan VS2013), tetapi melewatkan jalur proyek dalam \Packages\repositories.configfile.
Ted
1
Sebelum mencoba membuka kembali solusi, saya menggunakan alat pencarian, Agen Ransack, untuk mencari semua file dan folder untuk referensi apa pun untuk solusi / nama proyek sebelumnya dan memperbaikinya. Ada beberapa tempat yang perlu saya lakukan ini.
Andy G
31

Ganti nama operasi di visual studio hanya mengubah nama file, yaitu untuk proyek, * .prj dan untuk solusi * .sln. Anda perlu mengganti nama folder secara terpisah menggunakan sistem file, dan Anda harus menghapus dan membaca proyek karena mereka akan memiliki nama folder baru. Namun, perhatikan bahwa solusi dan file proyek masing-masing adalah file texst dan xml. Anda dapat menulis program Anda sendiri yang mem-parsing mereka dan mengganti nama kedua nama folder, nama file, dan memperbaiki file proyek / solusi secara internal.

AaronLS
sumber
1
Apakah ada alat gratis yang sudah melakukan ini? Saya tidak dapat menemukan apa pun.
David Pfeffer
5
Satu-satunya hal yang mungkin membantu Anda adalah CoolCommands 4.0 "Tambah Proyek Dari Folder", sehingga setelah Anda menghapus / mengganti nama folder proyek Anda dapat menambahkan semuanya sekaligus: sharptoolbox.com/tools/coolcommands
AaronLS
1
teks luhur 2 memiliki pencarian regex dan menggantikan fungsi yang membuatnya lebih mudah untuk berurusan dengan ini.
jfyelle
22

Anda juga dapat mengekspor template dan kemudian membuat proyek baru dari template yang diekspor dengan mengubah nama sesuai keinginan Anda

edoardo
sumber
1
Ini juga bekerja untuk saya. Saya harus melakukan satu penyesuaian. Saya menggunakan kerangka entitas dalam aplikasi web, dan meninggalkan file .dll lama di bawah nama proyek asli, jadi saya harus mencari tahu mengapa saya mendapatkan beberapa jenis kesalahan duplikat untuk kelas tabel. Setelah saya menghapusnya dari proyek, itu bekerja dengan baik. Semoga ini bisa membantu. Dan terima kasih, Edoardo!
Steve
2
Ini benar-benar cara terbaik untuk melakukannya, rujuk ke msdn.microsoft.com/en-us/library/… untuk melihat di mana harus memindahkan template yang diekspor untuk menemukannya di dialog "Proyek Baru".
Ares Ou
13

Di bawah ini adalah langkah demi langkah mengubah nama seluruh solusi Anda di Visual Studio 2013

Dengan asumsi kami mengubah proyek bernama "HelloWorld.ui" menjadi "Section1to5.ui"

  1. Pergi ke explorer solusi (tangkapan layar di bawah), klik kanan pada proyek yang ingin Anda ganti namanya dan pilih "Ganti nama". Masukkan nama baru yang Anda inginkan.

Screenshot Solution Explorer

  1. Klik kanan pada Proyek yang baru saja Anda ganti namanya, dan klik "Properties". Di bawah tab Aplikasi, ubah "Nama perakitan" dan "Ruang nama default".

  2. Di file Program.cs utama (atau file kode lain yang mungkin Anda buat), ganti nama deklarasi namespace untuk menggunakan nama baru. Untuk ini klik kanan namespace dan pilih Refactor> Ubah nama masukkan nama baru. Sebagai contoh:

    namespace HelloWorld.ui ----> namespace Section1to5.ui

  3. Selanjutnya, perluas "Properties" dan klik dua kali pada file AssemblyInfo.cs. Anda akan melihat fragmen kode di bawah ini:

[assembly: AssemblyTitle("HelloWorld.ui")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("HelloWorld.ui")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Anda perlu mengubah AssemblyTitle dan AssemblyProduct di Properties / AssemblyInfo.cs menjadi nama baru, dalam contoh ini dari "HelloWorld.ui" menjadi "Section1to5.ui". Setelah Anda selesai mengubah nama, simpan dan tutup Visual Studio.

  1. Di direktori proyek, masuk ke dalam folder "HelloWorld.ui" dan hapus direktori "bin" dan "obj".

  2. Setelah selesai, ubah nama folder "HelloWorld.ui" menjadi nama proyek baru.

  3. Buka file solusi yang diubah namanya dengan editor teks seperti Notepad atau Notepad ++ dan edit baris berikut:

    Proyek ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.ui", "HelloWorld.ui \ HelloWorld.ui.csproj", "{39FC65A3-3AE7-4EC9-B8F7-74F971636C70}"

Ganti semua instance "HelloWorld.ui" nama baru yang telah Anda pilih untuk proyek Anda, dalam hal ini "Section1to5.ui". Ini mengubah jalur proyek ke direktori yang diubah namanya di langkah 6.

  1. Buka file solusi dengan studio visual, dan bersihkan dan bangun kembali proyek.

  2. Anda mungkin memperhatikan bahwa tombol "Debug / Run" telah digantikan oleh tombol "Lampirkan". Jika ini terjadi, cukup klik kanan pada proyek dan pilih opsi "Set as StartUp project". Atau, klik pada Tools> Customize> Commands> Add command> Debug dan tambahkan tombol.

Anda telah selesai mengganti nama proyek, jika Anda ragu untuk memposting dan saya akan dengan senang hati membantu!

Abhishek Agrawal
sumber
6

Hapus bin Anda dan subfolder obj untuk menghapus banyak referensi yang salah lalu gunakan windows untuk mencari nama lama.

Edit kode atau file xml apa pun yang ditemukan dan dibangun kembali, harusnya ok sekarang.

Michael
sumber
4

Saya mencoba Visual Studio Project Renamer, tetapi, ia melemparkan pengecualian dalam beberapa kasus di mana saya mencobanya.

Saya telah sukses dengan CopyWiz .

Saya sama sekali tidak berafiliasi dengan mereka, dan saya belum membayar untuk itu, tetapi saya mungkin harus segera, karena itu adalah satu-satunya alat yang tampaknya bekerja untuk kedua proyek C # dan C ++ saya. Saya berharap mereka menghasilkan sedikit uang, dan terus meningkatkannya.

Cameron
sumber
4

Hapus / tambahkan metode file proyek

Metode ini sepenuhnya bertujuan mengubah nama direktori untuk proyek, seperti yang dilihat di Windows Explorer.

  1. Cadangkan seluruh proyek Anda menggunakan sesuatu seperti GIT, SVN atau WinZip (penting!).
  2. Dalam solusi di Visual Studio, hapus proyek.
  3. Ganti nama direktori di Windows Explorer.
  4. Tambahkan proyek kembali lagi dalam Visual Studio.

Keuntungan

  • Anda dapat membuat direktori dalam Windows Explorer cocok dengan nama proyek dalam solusi.

Kekurangan

  • Jika Anda menghapus perpustakaan, itu menghilangkan referensi ke perpustakaan tersebut dari proyek lain. Solusinya mungkin tidak dikompilasi setelah ini, sampai Anda menambahkan referensi ke pustaka kata kembali (ini cukup mudah). Inilah alasan mengapa langkah 1 (cadangan) sangat penting.
  • Jika Anda memiliki kontrol sumber, Anda akan kehilangan riwayat file.

Mengklik kanan pada proyek dan memilih "Buka Folder di Windows Explorer" berguna untuk melacak di mana proyek disimpan saat Anda melakukan proses ini.

Contango
sumber
4
WinZip ??? Saya yakin harap Anda menggunakan kontrol sumber nyata dan tidak membuat cadangan file zip kode Anda. Jika Anda, atau siapa pun yang membaca ini, silakan periksa try.github.io dan mencobanya di proyek uji. Kamu tidak akan kembali!
Matt Klein
2
Saya membaca komentar Anda Tuan @MattKlein dan Anda benar: D Terima kasih!
Jeancarlo Fontalvo
@ Matt Klein Sepenuhnya setuju, diperbarui untuk merekomendasikan GIT atau SVN juga.
Contango
3

Kamu bisa:

  1. klik file-> baru -> buat proyek dari proyek yang ada

  2. pilih file asli Anda, mis. solusi 1 dan masukan solusi nama file baru 2

  3. ubah nama proyek dalam solusi baru 2

李 全 全
sumber
Saya sangat menyukai pendekatan ini, apakah itu dipilih karena alasan tertentu?
Koperasi
mengunci mesin saya dekat sampai akhir - pada Visual Studio 2017
klewis
3

Jika Anda memiliki masalah dengan memuat proyek yang Dibagikan, seperti Xamarin, ingatlah untuk mengubah referensi ke lib yang dibagikan dalam file csproj. Saya mengembangkan game CocosSharp dan proyek Droid / iOS / WP81 tidak ingin dimuat. Saya harus mengubah baris di bawah ini di setiap file csproj (Driod / iOS / WP81) yang direferensikan lib Bersama. Itu disebabkan karena perubahan nama folder, jadi ganti YOUR_PREVIOUS_NAMESPACE dengan nama folder baru Anda.

<Import Project="..\YOUR_PREVIOUS_NAMESPACE.Shared\EmptyProject.Shared.projitems" Label="Shared" />

Juga saya perhatikan bahwa untuk proyek .Driod, nama perakitan di properti proyek tidak dapat diubah menggunakan studio visual (saya menggunakan 2015). Saya harus mengubah nama rakitan secara manual di file .Droid.csproj.

<AssemblyName>YourNameSpace</AssemblyName>

Kemudian saya memuat solusi dan dalam properti proyek tampilan nama baru muncul. Setelah membangun kembali dll dengan nama itu dihasilkan.

Zenon
sumber
2

Jika Anda Membuat Situs Web di Visual Studio 2010. Anda dapat mengubah nama proyek sebagai berikut.

Langkah 1: Dalam Visual Studio 2010 file SLN akan disimpan di bawah folder proyek dalam Visual studio 2010 dan file Sumber disimpan di bawah folder Situs web dalam Visual Studio 2010.

Langkah 2: Ganti nama folder dengan klik kanan pada folder itu maju oleh Ubah nama yang berisi proyek SLN Anda.

Langkah 3: Ganti nama nama file SLN dengan klik kanan pada file SLN itu maju oleh Ubah nama.

Langkah 4: Ganti nama folder yang berisi Sumber file SLN itu di bawah Website di Visual Studio 2010.

Langkah 5: Kemudian akhirnya klik dua kali file SLN Anda dan ubah root folder sumber SLN Anda.

Pavi Thran
sumber
2

Satu-satunya solusi yang bekerja untuk saya di Visual Studio 2013 dalam proyek WEB:

Katakanlah saya ingin mengubah nama "project1" menjadi "project2". Katakanlah path fisik ke file .sln saya adalah: c: \ my \ path \ project1 \ project1.sln

jadi path ke file .csproj saya serta bin dan folder obj harus: c: \ my \ path \ project1 \ project1 \

  1. Buka solusi dalam VS dengan mengklik dua kali file project1.sln.

  2. Di Solution Explorer, klik kanan proyek (BUKAN solusinya !!!), pilih Ubah nama, dan masukkan nama baru.

  3. Di Solution Explorer, klik kanan proyek dan pilih Properties. Pada tab Aplikasi, ubah "Nama perakitan" dan "Ruang nama default".

  4. Dalam file CS utama (atau file kode lainnya seperti Global.asax misalnya), ganti nama deklarasi namespace untuk menggunakan nama baru. Untuk ini klik kanan namespace dan pilih Refactor> Ubah nama masukkan nama baru. Sebagai contoh:

namespace project1

4.1 Dalam Solution Explorer, klik kanan proyek (BUKAN solusinya !!!), pilih Ubah nama, dan masukkan nama baru.

  1. Pastikan: AssemblyTitle dan AssemblyProduct di Properties / AssemblyInfo.cs diatur ke nama baru ("project2").

1 [rakitan: AssemblyTitle ("Nama Baru Di Sini")] 2 [rakitan: AssemblyDescription ("")] 3 [rakitan: AssemblyConfiguration ("")] 4 [rakitan: AssemblyCompany ("")] 5 [rakitan: AssemblyProduct (" Nama Baru Di Sini ")] 6 [rakitan: AssemblyCopyright (" Hak Cipta © 2013 ")] 7 [rakitan: AssemblyTrademark (" ")] 8 [rakitan: AssemblyCulture (" ")]

  1. Tutup Visual Studio.

  2. Hapus direktori bin dan obj secara fisik.

  3. Ganti nama folder induk dan folder sumber ke nama baru (project2):

Dalam contoh: c: \ my \ path \ project1 \ project1

akan menjadi: c: \ my \ path \ project2 \ project2

  1. Ganti nama file SLN dengan klik kanan pada file SLN itu dengan nama.

  2. Kemudian akhirnya buka file SLN (dalam notepad atau editor apa pun) dan salin dan ganti (Ctrl + h) nama lama apa pun dengan nama baru.

  3. Buka VS dan klik BUILD -> Clean Solution

  4. klik Bangun -> Bangun solusi dan kemudian F5 untuk menjalankan ...

  5. Catatan1: Jika Anda mendapatkan sesuatu seperti ini: Kesalahan Kompilasi CS0246: Jenis atau nama namespace 'project2' tidak dapat ditemukan (apakah Anda melewatkan direktif menggunakan atau referensi perakitan?)

Sumber File: c: \ Users \ Username \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ root \ 78dd917f \ d0836ce4 \ App_Web_index.cshtml.a8d08dba.b0mwjmih.0.cs

Lalu pergi ke folder "Temporary ASP.NET Files" dan hapus semuanya.

  1. Catatan2: Jika Anda mencoba untuk melakukan "save as" ke proyek bernama baru dan untuk tetap juga yang lama, pertimbangkan menduplikasi db Anda dengan memodifikasi connectionStrings di web.config dan juga dengan memulai kembali migrasi jika Anda memilikinya di proyek.
Dudi
sumber
2

Saya baru mengenal VS. Saya hanya punya masalah yang sama: Diperlukan untuk mengganti nama proyek yang dimulai setelah beberapa minggu bekerja. Ini yang saya lakukan dan berhasil.

  1. Untuk berjaga-jaga, buat cadangan dari folder Proyek Anda, meskipun Anda tidak akan menyentuhnya, tetapi untuk berjaga-jaga!
  2. Buat proyek baru dan simpan menggunakan nama yang Anda inginkan untuk proyek 'baru' Anda, artinya nama yang Anda inginkan untuk mengubah proyek 'lama' Anda.
  3. Bangun itu. Setelah itu Anda akan memiliki Proyek dengan nama yang Anda inginkan tetapi itu tidak apa-apa selain membuka jendela (Aplikasi Windows Form dalam kasus saya).
  4. Dengan proyect baru dibuka, klik pada Project-> Add Exem Ítem dan gunakan Windows Explorer cari folder 'lama' Anda Project dan pilih semua file di bawah ... Visual Studio xxx \ Projects \ oldApp \ oldApp
  5. Pilih semua file di sana (.vb, .resx) dan tambahkan ke Proyek 'baru' Anda (yang seharusnya sudah dibuka).
  6. Hampir langkah terakhir adalah membuka file Proyek Anda menggunakan Solution
    Explorer dan pada tab ke-1 ubah formulir startup default ke bentuk yang seharusnya.
  7. Bangun kembali semuanya.

Mungkin lebih banyak langkah tetapi kurang atau tidak sama sekali mengetik, hanya beberapa klik mouse. Semoga bermanfaat :)

J. Davalos
sumber