2012-12-28 31 views
6

Điều này có thể đã được đăng trước đó, nhưng tôi không chắc chắn tìm kiếm cụm từ tìm kiếm nào!Visual Studio: Cách quản lý mã được chia sẻ giữa các dự án

Giải thích nhanh.

Tôi có mã được chia sẻ giữa một vài dự án. Mã này vẫn đang hoạt động. Vấn đề là bất cứ khi nào tôi cần phải cập nhật mã này cho bất cứ điều gì, tôi không muốn phải làm điều đó 3 lần, điều này sẽ trở thành một cơn ác mộng.

Có cách nào để thêm nó vào một dự án, mà không cần sao chép nó vào thư mục dự án? tức là tôi muốn các lớp chia sẻ để được liên kết thành 3 dự án của tôi như

C: \ kho mã \ sharedclass.cs KHÔNG \ eachproject \ bin \ sharedclass.cs

Tôi có phải tạo ra nó vì nó là của riêng dự án thư viện? Sẽ tốt hơn nếu trình biên dịch có thể biên dịch nó thành mã 'bên ngoài'.

Chúc mừng.

+0

Bạn có ý nghĩa giống như tùy chọn "Thêm tệp dưới dạng liên kết" trong Visual Studio? http://support.microsoft.com/kb/306234 (EDIT: Đây là giả định rằng bạn chỉ đơn giản là không muốn sử dụng một dự án được chia sẻ?) –

+1

Chỉ cần bao gồm các dự án khác nhau trong (các) giải pháp của bạn và thêm tham chiếu đến dự án, không phải là .dll đã biên dịch. Kho lưu trữ mã nguồn của chúng tôi có một thư mục bao gồm mã được chia sẻ (phần lớn là các dự án Thư viện lớp) và chúng tôi tham khảo các dự án đó từ các giải pháp trong các khu vực hoàn toàn khác nhau của cây. Điều khó khăn là tìm ra cách sắp xếp mã trong điều khiển nguồn để làm cho intuituve này trở thành nhóm của bạn. (và không có cách "đúng" để làm điều đó. Cách bạn thiết lập nó tùy thuộc vào nhiều yếu tố, có thể mất một chút thời gian để lên kế hoạch chính xác.) – David

+0

http://msdn.microsoft.com/en-us /library/1xhzskbe.aspx –

Trả lời

-1

Nó là tốt hơn để trích xuất một phần chung vào một thư viện dự án riêng biệt và thêm tài liệu tham khảo của dự án này cho tất cả các giải pháp/dự án phụ thuộc.

Nếu không, bạn có thể Add code/file/item as Link.

+0

Thêm làm Liên kết hoạt động tốt nhất trong trường hợp cụ thể này. –

+2

Liên kết bị hỏng. – benderto

5

Có.

Bạn có thể thêm dự án từ bất kỳ đâu trên ổ cứng của mình vào giải pháp. Vì vậy, hãy đặt mã chia sẻ vào một thư viện lớp và thêm nó vào ba dự án của bạn.

+0

Đây cũng là cách tôi làm công cụ. Tôi có một thư viện tổng hợp các công cụ bao gồm rất nhiều thứ hữu ích mà tôi sử dụng trong bất kỳ phần nào của mã, vì vậy tôi sẽ thêm dự án đó vào bất kỳ dự án nào khác mà tôi đang làm việc. Khi bạn sửa đổi mã ở đó, nó sẽ được sửa đổi trong bất kỳ ứng dụng nào khác sử dụng dự án này. Và khi bạn cần phát hành, đôi khi bạn nên làm việc từ tệp DLL và giữ nó làm "phiên bản đúng", vì đôi khi bạn làm việc trong các chương trình khác trong một thời gian, bạn có thể phá vỡ cách thức hoạt động và các chương trình cũ. Nếu bạn giữ DLL tại bản phát hành, nó làm cho mọi việc đơn giản hơn. – Joe

2

Microsoft đã và đang hỗ trợ một dự án mã nguồn mở mà đi kèm được xây dựng vào VS bây giờ, nó được gọi là NuGet, bạn có thể sản lượng dự án chia sẻ của bạn như một tập tin NuGet và tiêu thụ nó vào các dự án khác của bạn.

Nó sẽ thực sự triển khai tất cả các tệp bạn chỉ định trong gói khi xây dựng.

Đây là cách .Net hỗ trợ các phụ thuộc ngay bây giờ. Bạn sẽ nhận thấy rằng ngay cả những thứ như EF đi qua các gói NuGet. Bạn thậm chí có thể lưu trữ nó miễn phí trên những nơi như MyGet.org tôi sử dụng nó và nó hoạt động khá tốt.

http://nuget.org/

0

Vâng, đặt mã mà cần phải được chia sẻ trong một dự án thư viện lớp riêng biệt, xây dựng nó và tham khảo các DLL tạo ra từ này xây dựng vào các dự án khác của bạn.

6

Như những người khác đã nói, bạn có thể chỉ cần nhấp chuột phải vào giải pháp của bạn trong trình khám phá giải pháp, chọn Thêm> Dự án hiện tại và duyệt đến tệp .csproj dự án chung và nó sẽ được đưa vào giải pháp từ vị trí ban đầu của nó.

Có hai vấn đề với điều này tuy nhiên đó có thể hoặc có thể không là một vấn đề, tùy thuộc vào kích thước của nhóm của bạn:

1 - Dự án chung sẽ bao gồm trong mỗi giải pháp với một đường dẫn tương đối đến tập tin giải pháp (IE: ... \ CommonProject \ Common.csproj). Điều này có nghĩa là tất cả các nhà phát triển phải có cùng cấu trúc tệp làm việc hoặc họ sẽ gặp lỗi khi họ cố mở dự án chính.

2 - Trong trường hợp đó, dự án chung được tham chiếu bởi nhiều dự án (nói hai - A và B) và nhà phát triển làm việc trong dự án A phải thực hiện các thay đổi đối với dự án chung như một phần nhiệm vụ của họ. Không có cách nào để nhà phát triển đó biết nếu những thay đổi mà họ đã thực hiện sẽ phá vỡ dự án B mà không thực sự kiểm tra dự án B và biên dịch nó. Khi ngày càng có nhiều dự án tham khảo dự án chung, rủi ro của việc này xảy ra tăng lên đến mức nó trở nên không thể quản lý được.

Một lần nữa, như của người khác đã nói, không có cách nào chính xác 'để làm điều này, tuy nhiên cách tiếp cận tôi đã thực hiện như sau:

1 - Sử dụng tích hợp liên tục như Cruise Control để quản lý việc xây dựng các dự án và đưa dự án chung vào dự án độc lập trên máy chủ.

2 - Tạo thư mục dưới sự kiểm soát nguồn của bạn để xây dựng các tệp DLL phổ biến. Có thư mục này được kiểm tra trên máy xây dựng của bạn và bất cứ khi nào các dự án phổ biến xây dựng, nó sao chép các DLL đầu ra vào thư mục DLL và cam kết những thay đổi này để kiểm soát nguồn.

3 - Sử dụng biến môi trường trên tất cả các máy phát triển và máy chủ xây dựng để kiểm soát vị trí của thư mục DLL chung và tham khảo DLL bằng biến đó thay vì đường dẫn được mã hóa cứng. (IE: thay vì C: \ Source \ MyCommonProjectDLLS \ Common.dll sử dụng $ (MyCommonLocation) \ Common.dll với biến 'MyCommonLocation' được đặt thành C: \ Source \ MyCommonProjectDLLS)

4 - Đối với bất kỳ dự án nào tham khảo DLL phổ biến, thiết lập một kích hoạt CI trên máy chủ xây dựng cho dự án đó để xem thư mục DLL phổ biến. Bất cứ khi nào thay đổi được cam kết với nó, máy chủ xây dựng sau đó sẽ xây dựng tất cả các dự án tiêu thụ.

Điều này ngay lập tức cho bạn biết nếu bạn đang thực hiện các thay đổi đột phá cho bất kỳ dự án nào khác. Hạn chế duy nhất là, trong mô hình này, các dự án tiêu thụ là lực lượng để cập nhật các DLL thông thường ngay khi chúng được tạo ra. Một cách khác là phiên bản Common DLL từ bản sửa đổi điều khiển nguồn khi nó được xây dựng và đặt mỗi phiên bản vào thư mục con của chính nó trong thư mục DLL chung. Vì vậy, bạn sẽ kết thúc với:

DLL Common
-1.0.0.1234
-1.0.0.1235
-1.0.0.1236

Và vân vân. Ưu điểm của điều này là mỗi dự án sau đó có thể chọn khi nào cập nhật các DLL thông thường bằng cách tham chiếu phiên bản mới của mã. Tuy nhiên nó cắt giảm cả hai cách vì điều này có thể có nghĩa là một số dự án còn lại với các phiên bản cũ của mã phổ biến lâu hơn chúng nên có thể tăng công việc liên quan khi thời gian đến cuối cùng mang lại những thay đổi đó.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn đã tip, tôi đã gặp vấn đề bạn mô tả ở trên và câu trả lời của bạn rất hữu ích! – QtRoS

0

Tôi sử dụng git submodules để đạt được điều này.

  1. Tạo kho lưu trữ git mới cho từng mô-đun (dự án) mà bạn muốn chia sẻ giữa các giải pháp. Tôi cũng thường bao gồm các bài kiểm tra đơn vị cho dự án đó trong một dự án riêng biệt nhưng trong cùng một kho lưu trữ git.
  2. Thêm submodule vào kho lưu trữ git của giải pháp sẽ sử dụng mã được chia sẻ. Thêm một mô-đun con tạo ra một liên kết đến một cam kết cụ thể của một kho lưu trữ bên ngoài. Khi mã trong mô-đun con được cập nhật, bạn sẽ có thể kéo các bản cập nhật cho giải pháp cha mẹ của bạn, về cơ bản giống như việc cập nhật tham chiếu đến cam kết mô-đun con.Tôi thấy rằng quá trình này dễ hình dung hơn bằng cách sử dụng ứng dụng như SourceTree.
  3. Thêm mô-đun con và kéo cam kết mới nhất sẽ tạo bản sao của dự án được chia sẻ bên trong thư mục giải pháp gốc. Nhập dự án vào giải pháp Visual Studio chính bằng cách nhấp chuột phải vào giải pháp và chọn "Thêm dự án hiện có".
  4. Thêm tham chiếu đến dự án được chia sẻ trong các dự án khác sẽ sử dụng dự án đó bằng cách nhấp chuột phải vào dự án và chọn "Thêm tham chiếu" và tìm dự án được chia sẻ trong tab "Giải pháp".

Bây giờ dự án được chia sẻ được đưa vào giải pháp, bạn sẽ có thể đẩy và kéo các thay đổi cho mô-đun con và những thay đổi này sẽ tự động được tích hợp vào giải pháp. Bạn cũng sẽ có thể thấy các thay đổi trong các kho lưu trữ git khác tham chiếu đến mô-đun con.

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