2009-03-25 35 views
38

Tôi có 3 giải pháp và giải pháp A yêu cầu phiên bản được xây dựng của các dll từ giải pháp B và C để biên dịch. không thể hợp nhất nó với một giải pháp ...Làm cách nào để liên kết nhiều giải pháp studio trực quan với nhau?

Cho đến nay có vẻ như Visual Studio không hỗ trợ tham chiếu giải pháp và msbuild đủ thông minh để biết rằng bạn đang xây dựng một giải pháp từ một v.v ... nếu tôi thử theo cách đó. Mục tiêu tổng thể là cố gắng làm cho nhiều giải pháp dường như chỉ có một - chỉ là giải pháp A.

Tôi tin rằng đây là một vấn đề phổ biến, nhưng làm thế nào để bạn liên kết nó một cách độc đáo?

+0

Tại sao bạn không thể hợp nhất chúng thành 1 giải pháp? –

+0

Ngoài ra tại sao bạn không sử dụng msbuild? – eglasius

+4

chúng tôi không thể đặt nó vào một giải pháp như B và C được sử dụng trong nhiều hơn chỉ là A. trong dev của nó được xây dựng giống như xây dựng vs; nếu msbuild hoạt động tốt hơn, hãy nói như thế nào! –

Trả lời

29

Câu hỏi này đã xuất hiện ở dạng different, nhưng related, biểu mẫu. Có thực sự là MSDN page that covers this.

Điều bạn đang tìm kiếm là cách tiếp cận đa giải pháp tương tự như Mô hình giải pháp đơn phân vùng cho các hệ thống lớn hơn. Có một "mọi thứ" giải pháp xây dựng tất cả mọi thứ và duy trì phụ thuộc liên thành phần của bạn. Đây là những gì bạn xây dựng khi bạn cần xây dựng giải pháp A. Sau đó bạn có các giải pháp riêng biệt chỉ bao gồm các thành phần B hoặc C.Về cơ bản, bạn vẫn sẽ có 3 giải pháp, nhưng bạn sẽ thêm các dự án từ các giải pháp B và C vào dung dịch A.

+2

Tuy nhiên, cũng có vấn đề với mô hình này. Ví dụ, TFS (-2012) vẫn chưa đủ thông minh để nhận ra rằng nếu bạn đổi tên một dự án trong bối cảnh của một giải pháp, bất kỳ giải pháp nào khác bao gồm dự án cũng cần được cập nhật (tham chiếu "" trong tệp sln). Ngoài ra, trong thế giới thực, bạn có thể sử dụng công cụ cập nhật (VS-2012) cho hầu hết mọi thứ, nhưng vẫn cần phát triển một số phần của giải pháp trong một giải pháp khác (ví dụ: đối với BizTalk, vẫn không thể với VS-2012 afaik), để giải pháp "mọi thứ" không thể thực hiện được. –

+0

Trong trường hợp này, bạn chỉ cần đi đến một mô hình phân vùng hoàn toàn với một hệ thống xây dựng tùy chỉnh. :) Đây không phải là một tình huống không phổ biến. –

3

Nó phải là cấp độ dự án mà bạn đang xem xét tôi tin tưởng. Xây dựng các dự án chứa trong Giải pháp B và C và sau đó thêm tài liệu tham khảo để các file DLL trong các dự án có liên quan trong Giải pháp A.

Trong Msbuild nếu bạn có một nhóm tài sản

<PropertyGroup> 

<SolutionsToBuild>SolutionB</SolutionsToBuild> 
<SolutionsToBuild>SolutionC</SolutionsToBuild> 
<SolutionsToBuild>SolutionA</SolutionsToBuild> 
</PropertyGroup> 

Sau đó thực hiện nhiệm vụ MSBuild

<MSBuild Projects="@(SolutionsToBuild)"/> 

Hope this helps

0

bạn có thể cố gắng thêm dòng lệnh xây dựng lệnh cho dll (trong dung dịch B và C), bạn phụ thuộc vào trong prebuild e Các dự án của bạn (trong giải pháp A)

0

Nếu bạn không thể đặt các dự án B và C vào cùng một giải pháp như dự án A thì không có cách nào để đảm bảo bạn có các tệp nhị phân cho B và C có chứa mã nguồn mới nhất khi bạn xây dựng dự án A.

Giải pháp dễ nhất mà tôi đã thấy là có một thư mục chung trong kho lưu trữ mã nguồn nơi mọi dự án sao chép các tệp nhị phân của nó nếu chúng cần được chia sẻ. Sau đó, tất cả các dự án khác có thể tham khảo các tệp nhị phân trong thư mục đó miễn là các cặp cục bộ của bạn trông giống như kho lưu trữ.

Không phải là giải pháp hoàn hảo, nhưng nó khá dễ làm việc.

0

Bạn có thể thêm dự án Makefile vào giải pháp A sẽ xây dựng các giải pháp B và C của bạn (ví dụ sử dụng msbuild) và thực hiện tất cả các dự án trong A phụ thuộc vào dự án Makefile đó. Bằng cách này, bạn sẽ không thể thêm các tham chiếu dự án vào các dự án trong B và C, nhưng bạn có thể sử dụng các tham chiếu dll và chúng sẽ luôn được xây dựng từ các nguồn mới nhất.

4

Gần đây tôi đã phát hiện ra rằng trong Visual Studio 2008, bạn có thể bao gồm các dự án hiện có trong nhiều giải pháp. Nhược điểm duy nhất cho đến nay có vẻ là nếu bạn thực hiện một thay đổi cho một dự án được chia sẻ và có nhiều giải pháp mở mà sử dụng dự án chia sẻ đó, bạn sẽ được yêu cầu "tải lại" các giải pháp khác.

Vì vậy, chỉ cần "Thêm dự án hiện tại" vào tất cả các giải pháp cần dự án. Tôi đang sử dụng TFS trên trang web hiện tại của tôi và có vẻ như không có vấn đề với ether kiểm soát nguồn.

1

Bạn có thể thử để tự động hóa quá trình hợp nhất để tiết kiệm thời gian: http://code.google.com/p/merge-solutions/

Mặc dù chúng tôi có vấn đề hơi khác: khoảng 15 giải pháp (tổng cộng ~ 150 dự án) đang sử dụng một thư viện chung. Vấn đề là nếu chúng ta cố gắng hợp nhất tất cả chúng thành một để tái cấu trúc/tiêu diệt mã dự phòng từ thư viện chung. 1. sáp nhập 15 giải pháp liên quan đến rất nhiều cách click và chờ đợi trong VS 2. Kết quả Giải pháp là không bao giờ được cập nhật - không ai làm phiền cập nhật nó vì kích thước của nó

+0

Công cụ tuyệt vời. Cảm ơn! –

0

Theo this answer, tôi sẽ khuyên bạn nên tạo của bạn tập tin batch của riêng bạn sẽ tạo các giải pháp có liên quan cho bạn.

Rất tiện dụng để sử dụng vì quá trình xây dựng sẽ tạo tiến trình xây dựng (Tương tự như cửa sổ đầu ra trong Visual Studio) với lệnh thúc đẩy cho mỗi và mọi phiên bản thi hành.

Hơn nữa, trong một trường hợp mà bạn cần phải xây dựng một giải pháp trước kia, bạn có thể viết xây dựng trật tự riêng của bạn, ví dụ:

  1. xây dựng giải pháp B
  2. xây dựng giải pháp C
  3. xây dựng giải pháp A (sử dụng nội bộ các tệp được xây dựng "giải pháp B" và "giải pháp C")

Tôi đã nhanh chóng viết script to clarify the build order mentioned above và hỗ trợ hầu hết các phiên bản Visual Studio hiện đại.

Trân trọng.

+0

Hoặc sử dụng [nant] (http://nant.sourceforge.net/) để chỉ định thứ tự xây dựng. Mỗi giải pháp xây dựng có thể là một nhiệm vụ riêng biệt trong một mục tiêu. –

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