làm thế nào để thay đổi không gian tên của toàn bộ dự án?


104

Tôi đang sửa đổi ứng dụng demo từ bài viết này: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Tôi cần cập nhật tất cả các tệp để sử dụng không gian tên của mình, chẳng hạn như bây giờ tệp nằm ở đây:

MySolution\MyApp\DemoApp\ViewModel\MainWindowViewModel.cs

đang sử dụng không gian tên như vậy:

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

Tôi cần di chuyển tệp vào đây (xóa thư mục DemoApp):

MySolution\MyApp\ViewModel\MainWindowViewModel.cs

và cũng có thể sử dụng đúng không gian tên:

namespace MyApp.ViewModel
{
....

làm thế nào để làm điều đó trong studio trực quan 2010?

Cập nhật ok ở đây là có thể trùng lặp Thay đổi không gian tên dự án trong Visual Studio Bây giờ tôi biết cách thay đổi không gian tên của dự án, nhưng làm thế nào để di chuyển tệp trên hệ thống tệp? (thoát khỏi thư mục "DemoApp")


4
Cũng giống như một FYI, bạn không nhất thiết phải có không gian tên phù hợp với cấu trúc thư mục trong .NET, điều này không bắt buộc.
James Michael Hare,

1
Như james đã nói, nó không bắt buộc .. nhưng tôi sẽ đặt câu hỏi tại sao ai đó không "hoàn thành công việc" trên một ứng dụng mà tôi cần làm việc.
NotMe

1
Về việc di chuyển tệp .. Ừm, cắt / dán và kéo / thả thường hoạt động trong trình quản lý giải pháp studio trực quan .. hoặc thậm chí chỉ cần đổi tên thư mục hoặc xóa. tùy thuộc vào những gì bạn đang thực sự cố gắng làm.
NotMe

Câu trả lời:


124

Tôi tưởng tượng một Thay thế trong Tệp ( Ctrl+ Shift+ H) đơn giản sẽ thực hiện thủ thuật; chỉ cần thay thế namespace DemoAppbằng namespace MyApp. Sau đó, xây dựng giải pháp và tìm kiếm lỗi biên dịch cho các mã định danh không xác định. Bất kỳ thứ gì đủ điều kiện DemoAppsẽ cần được thay đổi thành MyApp.


62
Quan trọng; cũng thay đổi không gian tên mặc định trong thuộc tính dự án; điều này kiểm soát không gian tên cho những thứ như resx
Marc Gravell

Tôi có một vài tệp XAML đại diện cho cửa sổ WPF, vì vậy điều này sẽ không hoạt động với tôi.
Pieter

6
Bạn cũng nên chạy Thay thế trên bất kỳ usingcâu lệnh nào để thay đổi từ using DemoAppthành using Myapp.
swbandit

5
cũng đổi tên <add namespace = "OldNameSpace" /> trong tất cả các file web.config trong thư mục quan điểm
neo112

@Pieter Bạn sẽ có thể thay thế tất cả cho toàn bộ ứng dụng, tiếp theo là cập nhật các thuộc tính như Marc đề xuất, sau đó đóng giải pháp và mở lại nếu không VS có hành vi không thể giải thích được với một số tự động hoàn thành.
Eric

153

Đi đến một nơi nào đó không gian tên được khai báo trong một trong các tệp của bạn. Đặt con trỏ vào phần của không gian tên bạn muốn thay đổi và nhấn F2. Điều này sẽ đổi tên không gian tên trong mọi tệp. Ít nhất, nó đã hoạt động trong dự án demo nhỏ của tôi mà tôi đã tạo để kiểm tra câu trả lời này!

Tùy thuộc vào phiên bản VS của bạn, phím tắt cũng có thể là Ctrl- R, Ctrl- R.


1
bởi một số lý do không làm việc cho tôi. Tôi nhấn F2 và không có gì xảy ra.
javapowered

6
@javapowered, thì phím nóng của bạn đã được tùy chỉnh. Tìm trong các tùy chọn VS cho bạn. Hôm nay của tôi là CTRL-R CTRL-R.
Amy

4
Lưu ý: Mặc dù tôi vẫn thích phương pháp này, nhưng [có thể hiểu được] nó không thể thay thế các tham chiếu trong các dạng xem và trong tệp web.config có trong thư mục Views /. Chỉ cần xem cho những.
Wiseguy

3
Đối với một phiên bản không phụ thuộc vào các thay đổi phím nóng, chỉ cần nhấp chuột phải vào tên không gian tên và chọn đổi tên.
Kat

3
Thật không may, điều này không hoạt động nếu bạn muốn tên mới bao gồm một .ký tự.
Botond Balázs

27

Chỉ cần nhấp chuột phải vào giải pháp, đi đến thuộc tính, thay đổi "không gian tên mặc định" trong phần 'Ứng dụng'.

nhập mô tả hình ảnh ở đây


3
Nó có thay đổi không gian tên trong các tệp hiện có không?
Priyesh Kumar

5
Không, nó sẽ không.
Anuja Lamahewa

3

Ctrl+ Shift+ Hkhông phải là giải pháp thực sự.

Bạn có thể sử dụng Resharper để thay đổi tất cả các định nghĩa không gian tên trong giải pháp của mình. Đây là cách tốt nhất tôi đã thử trước đây.

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


2
resharper đòi hỏi đầy đủ thổi máy tính để bàn đắt
Ivan G.

@IvanG. tốt, nhiều dự án thương mại cũng yêu cầu các nhà phát triển đắt tiền hoàn toàn, vì vậy một chiếc máy và giấy phép R # không quá tốn kém trong sơ đồ quy mô hơn;) Nếu bạn cần kiểm tra xem phương pháp này (hoặc của Adam hoặc Amy) đã hoạt động chính xác chưa , bạn có thể xem Tìm vấn đề về mã
StuartLC

1
@StuartLC rất tiếc thời kỳ của một nơi làm việc chuyên dụng và máy tính để bàn lớn đã qua đi, tôi sử dụng một máy tính xách tay thực sự mạnh mẽ cho sự phát triển của mình và khả năng sạc lại thực tế đã giết chết nó, vì vậy tôi không nên giới thiệu nó cho bất kỳ ai coi trọng thời gian.
Ivan G.

Guys bạn chỉ có thể sử dụng để đặt tên cho miễn phí mà bạn biết :-) Install nó kích hoạt phiên bản dùng thử miễn phí, đổi tên nó và gỡ bỏ nó nếu bạn muốn ;-)
Selçuk Ermaya

1

Tôi đã xem qua cấu trúc thư mục bằng một công cụ có tên BareGrep để đảm bảo rằng tôi đã nhận được tất cả các thay đổi không gian tên. Đây là một công cụ miễn phí cho phép bạn tìm kiếm các tệp trong một cấu trúc tệp cụ thể.


khớp tệp REGEX: (.exe) | (.dll) | (.cache) | (.pdb) sau đó đảo ngược trận đấu . lặp lại mô hình này để loại trừ các mã nhị phân khác, v.v.
twobob


1

Bạn có thể sử dụng ReSharper để tái cấu trúc không gian tên. Nó sẽ cung cấp 30 ngày dùng thử miễn phí. Nó sẽ thay đổi bảng tên theo cấu trúc thư mục.

Các bước:

1) Nhấp chuột phải vào dự án / thư mục / tệp bạn muốn cấu trúc lại.

2) Nếu bạn đã cài đặt ReSharper thì bạn sẽ nhận được tùy chọn Refactor-> Adjust Namespaces .... Vì vậy, hãy nhấp vào đây.

nhập mô tả hình ảnh ở đây

Nó sẽ tự động thay đổi không gian tên của tất cả các tệp đã chọn.


Cảm ơn .. Tôi đã có thể làm điều này.
sgowd

0

Tôi đã thử mọi thứ nhưng tôi đã tìm thấy một giải pháp thực sự hiệu quả. Nó tạo ra một giải pháp bị mắc kẹt với một tên không gian tên mới, v.v.

  1. Trong biểu mẫu chính, tìm tên không gian tên -> nhấp chuột phải -> Refactor -> Đổi tên và chọn tên mới. Chọn tất cả các hộp và nhấp vào OK.

  2. Trong trình khám phá giải pháp, đổi tên giải pháp thành một tên mới.

  3. Trong trình thám hiểm giải pháp, đổi tên dự án thành một tên mới.

  4. Đóng VS và đổi tên thư mục (ví dụ như chỉ huy tổng) trong thư mục giải pháp thành một tên mới.

  5. Trong tệp .sln, đổi tên cũ thành tên mới.

  6. Xóa các tệp .suo cũ (ẩn)

  7. Khởi động VS và tải dự án

  8. Dự án -> thuộc tính -> thay đổi tên Assembly và không gian tên mặc định thành một tên mới.


0

Tôi biết nó khá muộn nhưng đối với bất kỳ ai muốn làm điều đó từ bây giờ, tôi hy vọng câu trả lời này sẽ giúp ích được phần nào. Nếu bạn đã cài đặt CodeRush Express( phiên bản miễn phí và 'phải có'), nó cung cấp một cách đơn giản để thay đổi không gian tên rộng của dự án. Bạn chỉ cần đặt con trỏ vào không gian tên mà bạn muốn thay đổi và nó sẽ hiển thị smart tag(một hộp nhỏ màu xanh lam) bên dưới namespacechuỗi. Bạn có thể nhấp vào hộp đó hoặc nhấn Ctrl +các phím để xem Renametùy chọn. Chọn nó và sau đó nhập tên mới cho không gian tên rộng của dự án, nhấp Applyvà chọn những vị trí trong dự án của bạn mà bạn muốn nó thay đổi, trong hộp thoại mới và OKnó. Làm xong! :-)


Theo kinh nghiệm của tôi, CodeRush Express không phải là 'phải có' (ý kiến ​​cá nhân). Nó là tiện dụng cho những thứ như thế này.
Maarten

0

Khi tôi muốn thay đổi không gian tên và tên giải pháp, tôi đã làm như sau:
1) thay đổi không gian tên bằng cách chọn nó và đổi tên nó và tôi cũng làm như vậy với tên giải pháp
2) nhấp vào bóng đèn và đổi tên tất cả các trường hợp của không gian tên cũ
3 ) đã xóa tất cả các dự án khỏi giải pháp
4) đóng studio trực quan
5) đổi tên tất cả các dự án trong windows explorer
6) mở studio trực quan và thêm lại tất cả các dự án
7) đổi tên không gian tên trong tất cả các dự án trong thuộc tính của chúng
8) xóa thư mục bin ( từ tất cả các dự án)
9) xây dựng lại dự án

Điều đó hoạt động với tôi mà không gặp bất kỳ vấn đề nào và dự án của tôi cũng có quyền kiểm soát nguồn. Tất cả đều ổn sau khi đẩy những thay đổi đó vào điều khiển từ xa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.