จะเปลี่ยนเนมสเปซของโครงการทั้งหมดได้อย่างไร?


105

ฉันกำลังปรับเปลี่ยนแอปพลิเคชันสาธิตจากบทความนี้: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

ฉันต้องการอัปเดตไฟล์ทั้งหมดเพื่อใช้เนมสเปซของฉันเช่นตอนนี้ไฟล์อยู่ที่นี่:

MySolution\MyApp\DemoApp\ViewModel\MainWindowViewModel.cs

กำลังใช้เนมสเปซดังกล่าว:

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

ฉันต้องการย้ายไฟล์ที่นี่ (ลบโฟลเดอร์ DemoApp):

MySolution\MyApp\ViewModel\MainWindowViewModel.cs

และยังใช้เนมสเปซที่ถูกต้อง:

namespace MyApp.ViewModel
{
....

วิธีทำใน Visual Studio 2010

การอัปเดตตกลงที่นี่เป็นไปได้ที่จะทำซ้ำChange Project Namespace ใน Visual Studioตอนนี้ฉันรู้วิธีเปลี่ยนเนมสเปซของโครงการ แต่จะย้ายไฟล์ในระบบไฟล์ได้อย่างไร (กำจัดโฟลเดอร์ "DemoApp")


4
เช่นเดียวกับ FYI คุณไม่จำเป็นต้องใช้เนมสเปซเพื่อให้ตรงกับโครงสร้างโฟลเดอร์ใน. NET แต่ไม่จำเป็นต้องใช้
James Michael Hare

1
อย่างที่เจมส์บอกว่ามันไม่จำเป็น .. แต่ฉันจะตั้งคำถามว่าทำไมมีคนไม่ "ทำงานให้เสร็จ" ในแอพที่ฉันต้องทำงาน
NotMe

1
เกี่ยวกับการย้ายไฟล์ .. อืมการตัด / วางและลาก / วางมักจะใช้งานได้ภายในตัวจัดการโซลูชัน Visual Studio .. หรือแม้แต่เปลี่ยนชื่อโฟลเดอร์หรือลบ ขึ้นอยู่กับสิ่งที่คุณพยายามทำจริงๆ
NotMe

คำตอบ:


126

ฉันนึกภาพง่ายๆว่า Replace in Files ( Ctrl+ Shift+ H) จะทำเคล็ดลับได้ เพียงแค่แทนที่namespace DemoAppด้วยnamespace MyApp. หลังจากนั้นสร้างโซลูชันและค้นหาข้อผิดพลาดในการคอมไพล์สำหรับตัวระบุที่ไม่รู้จัก สิ่งใดที่มีคุณสมบัติครบถ้วนจะต้องมีการเปลี่ยนแปลงไปDemoAppMyApp


63
สำคัญ; เปลี่ยนเนมสเปซเริ่มต้นในคุณสมบัติโครงการด้วย สิ่งนี้ควบคุมเนมสเปซสำหรับสิ่งต่างๆเช่น resx
Marc Gravell

ฉันมีไฟล์ XAML สองสามไฟล์ที่แสดงถึงหน้าต่าง WPF ดังนั้นสิ่งนี้จึงใช้ไม่ได้กับฉัน
Pieter

7
นอกจากนี้คุณยังควรใช้แทนที่เมื่อใดusingงบการเปลี่ยนแปลงจากการusing DemoApp using Myapp
swbandit

5
เปลี่ยนชื่อ <add namespace = "OldNameSpace" /> ในไฟล์ web.config ทั้งหมดในโฟลเดอร์ views
neo112

@Pieter คุณควรจะสามารถแทนที่ทั้งหมดสำหรับแอปพลิเคชันทั้งหมดตามด้วยการอัปเดตในคุณสมบัติตามที่ Marc แนะนำจากนั้นปิดโซลูชันและเปิดอีกครั้งมิฉะนั้น VS มีพฤติกรรมที่อธิบายไม่ได้เมื่อเสร็จสิ้นอัตโนมัติบางอย่าง
Eric

153

ไปที่บางแห่งที่มีการประกาศเนมสเปซในไฟล์ของคุณ วางเคอร์เซอร์ไว้บนส่วนของเนมสเปซที่คุณต้องการเปลี่ยนแล้วกดF2ที่คุณต้องการเปลี่ยนแปลงและกด สิ่งนี้ควรเปลี่ยนชื่อเนมสเปซในทุกไฟล์ อย่างน้อยก็ใช้งานได้ในโครงการสาธิตเล็ก ๆ ของฉันที่ฉันสร้างขึ้นเพื่อทดสอบคำตอบนี้!

ทั้งนี้ขึ้นอยู่กับรุ่น VS ของคุณทางลัดนอกจากนี้ยังอาจจะมีCtrl- R, -CtrlR


1
ด้วยเหตุผลบางอย่างไม่ได้ผลสำหรับฉัน ฉันกด F2 แล้วไม่มีอะไรเกิดขึ้น
javapowered

6
@javapowered จากนั้นปุ่มลัดของคุณได้รับการปรับแต่งแล้ว ดูตัวเลือก VS สำหรับคุณ วันนี้ของฉันคือ CTRL-R CTRL-R
Amy

4
หมายเหตุ: แม้ว่าฉันจะยังคงชอบวิธีนี้ แต่ [เข้าใจได้] ไม่สามารถแทนที่การอ้างอิงในมุมมองและในไฟล์ web.config ที่อยู่ในไดเร็กทอรี Views / เพียงแค่ดูเหล่านั้น
Wiseguy

3
สำหรับเวอร์ชันที่ไม่ควรขึ้นอยู่กับการเปลี่ยนแปลงฮ็อตคีย์เพียงคลิกขวาที่ชื่อเนมสเปซแล้วเลือกเปลี่ยนชื่อ
กาด

4
น่าเสียดายที่สิ่งนี้ใช้ไม่ได้หากคุณต้องการให้ชื่อใหม่มี.อักขระ
Botond Balázs

28

เพียงคลิกขวาที่โซลูชันไปที่คุณสมบัติเปลี่ยน "เนมสเปซเริ่มต้น" ในส่วน "แอปพลิเคชัน"

ป้อนคำอธิบายภาพที่นี่


3
มันเปลี่ยนเนมสเปซในไฟล์ที่มีอยู่หรือไม่?
Priyesh Kumar

5
ไม่มันจะไม่
Anuja Lamahewa

3

Ctrl+ Shift+ Hไม่ใช่วิธีแก้ปัญหาที่แท้จริง

คุณสามารถใช้ Resharper เพื่อเปลี่ยนนิยามเนมสเปซทั้งหมดในโซลูชันของคุณ นี่เป็นวิธีที่ดีที่สุดที่ฉันเคยลองมาก่อน

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


2
resharper ต้องใช้เครื่องคอมพิวเตอร์ที่มีราคาแพงเป่าเต็ม
อีวานกรัม

@IvanG. โครงการเชิงพาณิชย์จำนวนมากต้องการนักพัฒนาราคาแพงเต็มรูปแบบเช่นกันดังนั้นเครื่องและใบอนุญาต R # จึงไม่แพงเกินไปในรูปแบบของสิ่งต่างๆ;) หากคุณต้องการตรวจสอบว่าวิธีนี้ (หรือ Adam หรือ Amy) ทำงานได้อย่างถูกต้อง คุณสามารถดูFind Code Issues
StuartLC

1
@StuartLC น่าเสียดายที่วันเวลาของสถานที่ทำงานโดยเฉพาะและเดสก์ท็อปขนาดใหญ่ได้หายไปแล้วฉันใช้แล็ปท็อปที่ทรงพลังสำหรับการพัฒนาของฉันและมีความคมชัดมากขึ้นในทางปฏิบัติดังนั้นฉันจึงไม่แนะนำให้ทุกคนที่ให้ความสำคัญกับเวลา
Ivan G.

พวกคุณสามารถใช้เพื่อเปลี่ยนชื่อได้ฟรีที่คุณรู้ :-) ติดตั้งเปิดใช้งานรุ่นทดลองใช้ฟรีเปลี่ยนชื่อและถอนการติดตั้งหากคุณต้องการ ;-)
Selçuk Ermaya

1

ฉันได้ดูโครงสร้างโฟลเดอร์ด้วยเครื่องมือที่เรียกว่า BareGrep เพื่อให้แน่ใจว่าฉันได้รับการเปลี่ยนแปลงเนมสเปซทั้งหมดแล้ว เป็นเครื่องมือฟรีที่จะช่วยให้คุณสามารถค้นหาไฟล์ในโครงสร้างไฟล์ที่ระบุ


ไฟล์ตรงกับนิพจน์ปกติ: (.exe) | (.dll) | (.cache) | (.pdb) จากนั้นสลับการแข่งขัน ทำซ้ำรูปแบบนี้เพื่อยกเว้นไบนารีอื่น ๆ และอื่น ๆ
twobob


1

คุณสามารถใช้ ReSharper สำหรับการปรับโครงสร้างเนมสเปซ จะให้ทดลองใช้ฟรี 30 วัน มันจะเปลี่ยน namesapce ตามโครงสร้างโฟลเดอร์

ขั้นตอน:

1) คลิกขวาที่โปรเจ็กต์ / โฟลเดอร์ / ไฟล์ที่คุณต้องการ refactor

2) หากคุณติดตั้ง ReSharper แล้วคุณจะได้รับตัวเลือก Refactor-> Adjust Namespaces .... ดังนั้นคลิกที่นี่

ป้อนคำอธิบายภาพที่นี่

มันจะเปลี่ยนช่องว่างชื่อของไฟล์ที่เลือกทั้งหมดโดยอัตโนมัติ


ขอบคุณ .. ฉันทำได้แล้ว
sgowd

0

ฉันลองทุกอย่างแล้ว แต่พบวิธีแก้ปัญหาที่ได้ผลจริง มันสร้างโซลูชันที่ไม่ได้รับการแก้ไขด้วยชื่อเนมสเปซใหม่เป็นต้น

  1. ในรูปแบบหลักค้นหาชื่อเนมสเปซ -> คลิกขวา -> Refactor -> เปลี่ยนชื่อและเลือกชื่อใหม่ เลือกช่องทั้งหมดแล้วคลิกตกลง

  2. ในตัวสำรวจโซลูชันเปลี่ยนชื่อโซลูชันเป็นชื่อใหม่

  3. ในตัวสำรวจโซลูชันเปลี่ยนชื่อโปรเจ็กต์เป็นชื่อใหม่

  4. ปิด VS และเปลี่ยนชื่อโฟลเดอร์ (ใน Total Commander เป็นต้น) ในโฟลเดอร์โซลูชันเป็นชื่อใหม่

  5. ในไฟล์. sln เปลี่ยนชื่อเก่าเป็นชื่อใหม่

  6. ลบไฟล์. suo เก่า (ซ่อนอยู่)

  7. เริ่ม VS และโหลดโครงการ

  8. โครงการ -> คุณสมบัติ -> เปลี่ยนชื่อแอสเซมบลีและเนมสเปซเริ่มต้นเป็นชื่อใหม่


0

ฉันรู้ว่ามันค่อนข้างสาย แต่สำหรับใครก็ตามที่ต้องการทำต่อจากนี้ฉันหวังว่าคำตอบนี้จะช่วยพิสูจน์ความช่วยเหลือได้ หากคุณติดตั้งCodeRush Express( เวอร์ชันฟรีและ 'ต้องมี') จะมีวิธีง่ายๆในการเปลี่ยนเนมสเปซแบบกว้างของโปรเจ็กต์ คุณเพียงแค่วางเคอร์เซอร์ของคุณบนเนมสเปซที่คุณต้องการเปลี่ยนและมันจะแสดงsmart tag(กล่องสีฟ้าเล็ก ๆ ) ใต้namespaceสตริง คุณสามารถคลิกช่องนั้นหรือกดCtrl +แป้นเพื่อดูRenameตัวเลือก เลือกจากนั้นพิมพ์ชื่อใหม่สำหรับเนมสเปซแบบกว้างของโปรเจ็กต์คลิกApplyและเลือกสถานที่ในโครงการของคุณที่คุณต้องการให้เปลี่ยนแปลงในกล่องโต้ตอบใหม่และOKมัน เสร็จแล้ว! :-)


จากประสบการณ์ของฉัน CodeRush Express ไม่ใช่ 'สิ่งที่ต้องมี' (ความคิดเห็นส่วนตัว) มันสะดวกสำหรับสิ่งนี้
Maarten

0

เมื่อฉันต้องการเปลี่ยนเนมสเปซและชื่อโซลูชันที่ฉันทำดังนี้
1) เปลี่ยนเนมสเปซโดยการเลือกและเปลี่ยนชื่อและฉันก็ทำเช่นเดียวกันกับชื่อโซลูชัน
2) คลิกที่หลอดไฟและเปลี่ยนชื่ออินสแตนซ์ทั้งหมดของเนมสเปซเก่า
3 ) ลบโปรเจ็กต์ทั้งหมดออกจากโซลูชัน
4) ปิดวิชวลสตูดิโอ
5) เปลี่ยนชื่อโปรเจ็กต์ทั้งหมดใน windows explorer
6) เปิดวิชวลสตูดิโอและเพิ่มโปรเจ็กต์ทั้งหมดอีกครั้ง
7) เปลี่ยนชื่อเนมสเปซในโปรเจ็กต์ทั้งหมดในคุณสมบัติ
8) ลบโฟลเดอร์ bin ( จากโครงการทั้งหมด)
9) สร้างโครงการอีกครั้ง

นั่นใช้ได้ผลสำหรับฉันโดยไม่มีปัญหาใด ๆ และโครงการของฉันก็มีการควบคุมแหล่งที่มาเช่นกัน ทุกอย่างเรียบร้อยดีหลังจากกดการเปลี่ยนแปลงเหล่านั้นไปที่รีโมท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.