2012-01-24 29 views
6

các thực hành tốt nhất để xác định thư mục đầu ra mục tiêu cho debug/release là gì: Là nó tốt hơn để có thư mục riêng biệt cho debug/release hay tôi nên sử dụng cùng thư mục cho cả hai (khi sử dụng. NET/C#)?Các thư mục riêng biệt hoặc giống nhau cho đầu ra Gỡ lỗi/Phát hành khi sử dụng .NET (C#)?

Tôi có hai giải pháp riêng biệt, do đó, các dự án của một giải pháp không thể có tham chiếu của dự án cho dự án của giải pháp khác. Vì vậy, bạn buộc phải thêm một tham chiếu đến tập tin lắp ráp trực tiếp. Điều này dẫn đến một vấn đề khác: Nếu bạn thêm một tham chiếu đến một assembly khác thông qua một tệp, bạn chỉ có thể thêm một thay vì một để gỡ lỗi và phát hành một lần (giống như bạn có thể làm với các thư viện trong C++). Một vấn đề khác là tôi phải thêm một tham chiếu, ví dụ, vào bin/Release /MyOtherProject/MyAssembly.dll. Tôi nghĩ rằng điều này là khó hiểu, đặc biệt là khi xây dựng Debug và có phiên bản tham chiếu. => Xây dựng lỗi và xung đột phiên bản có thể xảy ra.

Có ai có kinh nghiệm lâu năm trong việc xây dựng vào cùng một thư mục đích trong các dự án và môi trường lớn không?

Đây là câu hỏi chính xác hơn liên quan đến câu hỏi tràn ngăn xếp Should we still make a difference between the release and debug output folders?.

+5

VS tự động tạo các thư mục riêng biệt. –

+0

... nhưng nếu bạn thêm tham chiếu đến một assembly khác, bạn chỉ có thể thêm một tham chiếu thay vì một để gỡ lỗi và phát hành một lần. Nếu tôi có một số giải pháp (phụ thuộc vào nền tảng hiện tại), tôi phải thêm tham chiếu, ví dụ: để bin/Release/MyOtherProject/MyAssembly.dll. Tôi nghĩ rằng điều này là khó hiểu, đặc biệt là khi xây dựng Debug và có phiên bản tham chiếu. => Xây dựng lỗi và xung đột phiên bản có thể xảy ra – Beachwalker

+2

Nếu bạn đang đồng thời phát triển các hội đồng khác, dự án cho rằng nên là một phần của một giải pháp. Bằng cách đó cả hai được biên dịch trong cùng một cấu hình (Debug hoặc Release) với nhau. Nếu hội đồng khác là một nỗ lực riêng, thì tôi sẽ sử dụng phiên bản Phát hành để phiên bản Gỡ lỗi không trượt vào các tệp dự án Phát hành của bạn cho dự án khác. –

Trả lời

5

Chúng tôi đã sử dụng cùng một thư mục để gỡ lỗi và phát hành trong các ứng dụng .NET trong 10 năm và chưa bao giờ gặp sự cố. Phương pháp này làm cho nhiều tác vụ dễ dàng hơn, chẳng hạn như xây dựng lượt cài đặt, sao chép các tệp DLL tùy chỉnh vào thư mục sau xây dựng và các tệp phiên bản trong thư mục đầu ra chẳng hạn như tệp giấy phép cần thiết cho nhà phát triển để chạy ứng dụng một cách chính xác.

4

Nếu chúng là hai giải pháp khác nhau, tôi không thấy lý do chính đáng tại sao bạn muốn tham chiếu đầu ra Gỡ lỗi. Trong thực tế, tôi không nghĩ rằng bạn nên tham khảo đầu ra trong thư mục dự án khác ở tất cả. Tài liệu tham khảo của bạn có thể bị hỏng nếu mã được chuyển sang máy khác và bạn không sao chép hoàn toàn cấu trúc dự án của mình.

Tôi nghĩ rằng cách tốt nhất sẽ là một trong hai

1) Có một thư mục Lib trong dự án/Dung dịch A mà bạn tự sao chép đầu ra của dự án/Giải pháp B. Đừng này nếu bạn không thay đổi dự án B rất thường xuyên.

2) Đặt cả hai dự án vào cùng một giải pháp, sau đó thêm tham chiếu vào dự án. Hãy nhớ rằng, bạn có thể có một dự án trong nhiều giải pháp. Làm điều này nếu bạn đang phát triển cả hai dự án cùng một lúc.

+2

Đúng, nếu Dự án A nằm trong Dự án Kiểm soát Nguồn (TFS) A và Dự án B nằm trong Dự án Kiểm soát Nguồn B, bạn có thể kiểm tra cả A và B từ một giải pháp, đó là khá tốt đẹp. – John

+0

Đầu ra phát hành không được có các biểu tượng gỡ lỗi (không phải bên trong hoặc dưới dạng tệp pdb) từ quan điểm của tôi. Một tùy chọn sẽ là xóa các tệp pdb dưới dạng bước xây dựng bài đăng trong quá trình thiết lập. – Beachwalker

+0

Hiện tại chúng tôi có quá nhiều tệp dự án (hội đồng, được nạp động và trao đổi qua mùa xuân) để xây dựng chúng trong một giải pháp duy nhất. VS + Resharper trở nên rất chậm khi dung dịch lớn. Vì vậy, có một giải pháp không phải là một lựa chọn (xem bình luận ở phía trên). Một lý do khác là việc phân phối bởi các thành phần bên ngoài ngay vào kho và CI cần coop với sự phát triển hiện tại/mới nhất (một tùy chọn để giải quyết điều đó sẽ tách rời việc phân phối nhưng điều này sẽ chi phí cho việc thay đổi unittests trong khi thay đổi api). – Beachwalker

4

Nếu bạn có hai dự án liên quan, bạn quan tâm đến chúng ở cùng một loại mục tiêu và cấu hình (có nghĩa là nó không phải là gói của bên thứ ba mà bạn vừa sử dụng) - bạn nên đặt chúng vào cùng một giải pháp.

Nếu bạn không thể vì lý do nào đó, có một giải pháp khác (Một chút xấu xí).

Bạn có thể chỉnh sửa tập hợp tham chiếu .csproj và "động" dựa trên mục tiêu. Trong tệp .csproj, các tham chiếu nằm bên trong một phần tử XML được gọi là "ItemGroup". Trong mỗi nhóm item bạn có nhiều phần tử "Tham chiếu", và đường dẫn đến assembly nằm trong phần tử "Gợi ý". Bạn có thể đặt biến $ (Cấu hình) trong gợi ý.Ví dụ:

<ItemGroup> 
    <Reference Include="your assembly"> 
     <HintPath>..\..\$(Configuration)\blabla.dll</HintPath> 
    </Reference> 
</ItemGroup> 

Bằng cách này, tên thư mục sẽ bao gồm tên cấu hình của bạn (chúng phải khớp - có nghĩa là nếu bạn thay đổi tên bạn phá vỡ mọi thứ).

lựa chọn khác là để xác định ba nhóm mục hoàn toàn khác nhau và sử dụng "Tình trạng" thuộc tính:

  1. mục nhóm không có điều kiện sẽ sử dụng để tham khảo hệ thống, System.Xml vv
  2. Nhóm mặt hàng có thuộc tính Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " sẽ bao gồm các tham chiếu sẽ được sử dụng trong cấu hình Gỡ lỗi.
  3. Nhóm mặt hàng có thuộc tính " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " cho cấu hình Phát hành.

Trong mỗi nhóm mục, bạn sẽ có tham chiếu đến các hội đồng trong cấu hình chính xác.

Đó là một chút xấu xí, bởi vì các .csproj đôi khi được sửa đổi tự động cộng với bạn có thể dễ dàng quên và làm cho một mess ra khỏi nó. Nhưng dù sao, nó sẽ hoạt động.

+0

Việc sử dụng biểu thức $ biến làm việc (hoặc nói công trình) cũng trong các dự án Visual C++, tôi đã sử dụng chúng bản thân mình. Nhưng trong các dự án C# với VS là có một vấn đề mà bạn không thể nhập các biến đó bằng cách sử dụng ui (như bạn có thể làm trong các dự án C++). Cá nhân, tôi không thích những thứ bạn không thể diễn đạt bằng IDE và cần phải chỉnh sửa tệp bằng tay sau khi thay đổi. Tuy nhiên, đề xuất của bạn đang hoạt động và một cách để giải quyết vấn đề. Cám ơn. – Beachwalker

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