2011-01-26 26 views
31

Đầu tiên, một nền nhỏ.Cách tốt nhất để thực hiện đổi tên không gian tên số lượng lớn trên một ứng dụng C# lớn là gì?

Hiện tại không gian tên và lắp ráp trong codebase của chúng tôi (~ 60 cụm, hàng ngàn lớp) trông giống như

WidgetCompany.Department.Something 

Chúng tôi hiện nay đã được tách ra như vậy mà chúng tôi đang bán các phần mềm mà lái WidgetCompany, vì vậy chúng tôi muốn đổi tên namespace & hội

NewCompany.Something 

trong những trường hợp bình thường tôi có lẽ chỉ gắn bó với không gian tên cũ, nhưng vấn đề là khách hàng của chúng tôi không muốn nhìn thấy tên của một trong những đối thủ cạnh tranh của họ anywh trong ứng dụng. Trong cơ hội ra rằng họ thấy một dấu vết ngăn xếp, lắp ráp tài sản vv, nó sẽ không hiển thị. Nó không có nghĩa là để che giấu cộng sự của chúng tôi hoặc làm bất cứ điều gì nham hiểm, chúng tôi chỉ cần đảm bảo rằng mọi người biết chúng tôi là một thực thể riêng biệt, quản lý riêng biệt và họ không cần phải lo lắng về dữ liệu đang được chia sẻ v.v.

Bây giờ câu hỏi. Cách tốt nhất để thực hiện kiểu đổi tên bao gồm tất cả này là gì? Sau đây sẽ cần phải thay đổi:

  • Namespace cho (gần như) mọi tầng lớp trong ứng dụng
  • Mỗi using tuyên bố trong ứng dụng mà tham chiếu tên cũ
  • cấu trúc thư mục cho từng dự án
  • Tham khảo giữa các dự án dựa trên cấu trúc thư mục đã thay đổi
  • .Lưu tệp tham chiếu cấu trúc thư mục đã thay đổi
  • Bất kỳ tài liệu tham khảo để những lớp học có đủ đủ điều kiện (nên ít và xa giữa )
  • Bất kỳ tài liệu tham khảo cho những lớp trong các file xml cấu hình (config phần vv)
  • file AssemblyInfo.cs cho mỗi lắp ráp
  • AssemblyName trong mỗi csproj nộp

tôi bị mắc kẹt với chiến lược tìm-thay-cầu nguyện hoặc là có một cái gì đó tốt hơn?

+0

Đăng ký, tìm, thay thế, xây dựng. Hoặc có thể là ReSharper. – Will

+0

Tên không gian mới trong một .dll mới hoặc cùng một dll với không gian tên đã thay đổi và biên dịch lại –

+0

Trình thu thập lại có thay đổi tên miền => thay đổi không gian tên không? Đã lâu rồi kể từ khi tôi sử dụng nó, nhưng tôi đã không nghĩ như vậy. – Brook

Trả lời

30

Nhấp chuột phải vào không gian tên hiện tại của bạn và chọn Refactor -> Đổi tên và thay đổi tên trong cửa sổ bật lên xuất hiện sau một thời gian. Nhập tên mới của bạn và nhấp ok.

Nếu bạn có nhiều chiều sâu cho không gian tên của mình, thì Visual Studio sẽ không cho phép bạn nhập một dấu chấm. Tuy nhiên, nếu bạn sao chép và dán một dấu chấm, bất chấp cảnh báo, nó sẽ thực hiện công việc kinh doanh.

+7

Thời gian qua tôi đã kiểm tra không hoạt động với nhiều cấp độ của một không gian tên như level1.level2.level3. Nếu không gian tên là một cấp độ duy nhất, không có dấu chấm thì nó hoạt động tốt. Đây là VS 2008 SP1. – SRM

+0

Tôi đoán bạn có thể làm điều đó một biểu tượng tại một thời điểm. (I havent đã thử rằng mặc dù.) – franklins

+2

+1 bởi vì điều đó giúp với những thứ được gõ mạnh mẽ, nhưng không giúp với tên lắp ráp, tệp csproj, tệp xml, v.v. – Brook

3

Trước tiên, tôi sẽ thử tùy chọn . Nhưng như đã đề cập trong bình luận cho một câu trả lời nó không hoạt động tốt (Hoặc tôi đã không tìm thấy làm thế nào để làm cho nó hoạt động). Vì vậy, tôi thích sử dụng kịch bản sau đây, đặc biệt là nếu bạn muốn thêm một số không gian tên addiotional.

1) Đổi tên namespace của bạn root (WidgetCompany) để một cái gì đó giống như NAMESPACE_TO_BE_REPLACED sử dụng Refactor-Rename
2) Thay thế NAMESPACE_TO_BE_REPLACED với namespace cuối cùng của bạn (NewCompany.WidgetSoftware) sử dụng find-n-thay thế hộp thoại

Và đừng quên để đổi tên dự án , các không gian tên mặc định, v.v.

8

ReSharper. Nhận phiên bản 5.1 từ JetBrains miễn phí trong 30 ngày (quá đủ thời gian để đổi tên). Đặt con trỏ trên vùng tên mà bạn muốn thay đổi và nhấn Ctrl-R hai lần (ReSharper Rename). Nó sẽ làm việc với một không gian tên bất kỳ số lượng các cấp sâu, và chuyển đổi bất kỳ cách sử dụng của không gian tên đó sang một vùng mới. Tuy nhiên, bạn sẽ phải thay đổi tất cả các không gian tên độc đáo trong giải pháp của bạn (trừ khi bạn chỉ cần đi với chức năng Find/Replace)

0
  • mở một lớp ngẫu nhiên trong [WidgetCompany.Department.Something]
  • Edit-> Tìm và Thay thế -> Thay thế trong tập tin
  • Loại "WidgetCompany.Department.Something" trong FindWhat khu vực
  • Loại "NewCompany.Something" trong Replace with khu vực
  • Chọn dự án hiện tại trong Tìm trong khu vực.
  • Replace All
1

Nếu bạn có ReSharper:

  1. dự án Nhấp chuột phải, Thuộc tính. Thay đổi không gian tên mặc định thành không gian tên mong muốn.

  2. dự án Nhấp chuột phải, Refactor ->Điều chỉnh Namespace để cập nhật tất cả các không gian tên để sử dụng không gian tên mặc định

Sau đó chỉ cần để cho nó làm kỳ diệu của nó.

Các vấn đề liên quan