21

OK, vì vậy tôi sẵn sàng thừa nhận rằng tôi là một người mới khi nói đến việc tích hợp liên tục.MSBuild - Sử dụng tệp .csproj hoặc cuộn tệp của riêng bạn?

Điều đó đang được nói, tôi đang cố gắng thiết lập môi trường CC.NET để giáo dục bản thân, nhưng tôi đang gặp khó khăn khi tìm thông tin tôi cần để thiết lập phần xây dựng tự động.

Như tôi đã hiểu, trong C# tệp .csproj được tạo bởi VS 2005 và chuyển tiếp tệp MSBuild hợp lệ. Để wit, tôi đã có thể tích hợp các nhiệm vụ MSBuild vào CC.NET sử dụng file csproj, nhưng tôi có một vài vấn đề với điều này:

  1. Có rất nhiều xảy ra ở đây rằng tôi không chắc chắn tôi thực sự cần trong môi trường xây dựng tự động.
  2. Tôi không tạo tệp này. Tôi không hiểu, và điều đó làm tôi sợ. (Programming By Coincidence)
  3. Hầu hết những gì đang xảy ra dường như được trừu tượng hóa qua $(MSBuildToolsPath)\Microsoft.CSharp.targets
  4. Như một kết quả của 1, 2, và 3, sửa đổi các tập tin để bao gồm một cái gì đó giống như MbUnit dường như phức tạp và khó khăn hơn nó cần phải được . Lựa chọn thực sự duy nhất của tôi là đưa nó vào phần AfterBuild, có vẻ giống như một vụ hack với tôi.

Vì vậy, một vài câu hỏi dành cho những người CC.NET, nhóm MSBuild và những người dùng MbUnit.

  1. Khi sử dụng MSBuild, bạn có nên sử dụng tệp xây dựng do VS tạo ra không? Hay tôi nên tạo của riêng mình?
  2. Các thử nghiệm MbUnit có nên là một phần của tệp MSBuild hoặc tệp CC.NET không? Nghiên cứu của tôi dường như gợi ý rằng chúng thuộc về tệp MSBuild. Nếu trường hợp đó xảy ra, tôi có tạo tệp MSBuild .proj mới và kiểm tra xem có phải trong CVS ngoài tệp .csproj không? Hoặc tác vụ MbUnit có trở thành một phần của tệp .csproj của tôi không?
  3. Tương tự như câu hỏi 2. Nếu tôi thêm các thử nghiệm MbUnit vào tệp MSBuild và kết thúc bằng tệp .csproj, là Target Name="AfterBuild" thực sự là phần để thêm thông tin đó? Không nên có phần Target Name="Test"? Sử dụng tệp .csproj đã tạo VS dường như ngăn tùy chọn thứ hai.

Tôi biết có rất nhiều thứ, nhưng hầu hết những gì tôi có thể tìm thấy trực tuyến đều giả định một mức độ quen thuộc với các chủ đề mà tôi không có - trừ khi tôi nhầm, đường cong học tập cho công cụ này không phải là một đường cong ở tất cả, đó là một chức năng bước. :)

Chỉnh sửa 1: Tôi đã cập nhật văn bản ngắn gọn hơn một chút và để giải quyết một số câu hỏi kéo dài mà tôi đã có với câu trả lời.

Trả lời

13

Tôi khuyên bạn nên sử dụng tệp .csproj được tạo - thực tế cho sản xuất, tôi nghĩ rằng việc sử dụng tệp .sln được tạo là một ý tưởng hay. Tôi đã thấy rằng bạn sẽ đạt được bằng cách sử dụng các tệp giải pháp giống như các nhà phát triển. Hãy chú ý rằng các tệp .sln không thực sự là tệp dự án msbuild hợp lệ - chúng được chuyển thành các dự án msbuild bởi chính msbuild khi chúng được sử dụng làm đầu vào. Khôn lanh!

Vì mục đích học tập, bạn có thể muốn đăng nhập bản dựng .csproj và thực hiện từng bước để biết ý tưởng về những gì đang diễn ra. MSBuild là một chút khai báo hơn nant mặc dù, do đó, mất thời gian của bạn và thử nghiệm một chút.

Cuối cùng, tôi sẽ gói các tệp .sln hoặc .csproj của bạn trong dự án tập lệnh xây dựng liên tục với các tác vụ msbuild để xây dựng các dự án của bạn và chạy thử nghiệm đơn vị của bạn với nhau. Bằng cách này, các nhà phát triển không phải chạy thử nghiệm đơn vị mỗi khi họ xây dựng - nhưng mỗi khi họ tích hợp mã của họ, các kiểm tra đơn vị sẽ chạy. Và có, hãy chắc chắn rằng họ chạy nhanh! Bất cứ điều gì mà mất nhiều hơn một giây nên được chạy trong một dự kiến ​​(hàng đêm?) Xây dựng để thay thế. Có thể chúng là các bài kiểm tra đơn vị ít hơn và các bài kiểm tra tích hợp hơn được viết bằng một khung kiểm tra đơn vị nếu chúng mất hơn một giây.

Chỉnh sửa: Một số thông tin bổ sung mà tôi thấy hữu ích - sử dụng MSBuild 3.5 sẽ cho phép bạn lấy kết quả mục tiêu từ tệp .sln, trong khi thông tin này không được trả về trong MSBuild 2.0 (mặc dù tôi nghĩ nó sẽ hoạt động cho các tệp .csproj trong cả hai phiên bản). Bạn có thể sử dụng đầu ra (các tệp dựng sẵn của bạn) làm đầu vào cho khung kiểm thử đơn vị của bạn.

0

Bạn có thể sử dụng .csproj làm đầu vào cho msbuild. Bạn có thể thêm các nhiệm vụ cho nó vào csproj theo cách thủ công, điều này sẽ bị bỏ qua trong quá trình phản hồi từ VS. Nhưng nếu bạn định làm một số thứ không tầm thường thì tốt hơn là tạo các tập lệnh riêng biệt của msbuild. Và chúng có thể được tham chiếu từ các tệp csproj. Bạn đã xem MS Build Server là một phần của TFS chưa? Nó tích hợp với SourceControl của TFS và có thể được sử dụng cho CI. Các tệp dự án của nó là các tập lệnh msbuild.

Nếu tôi đã sử dụng nAnt, có bắt buộc phải cài đặt VS trên máy chủ không? Ý của bạn là 'MSBuild'? Không, không nhất thiết phải cài đặt VS để sử dụng msbuild với các tệp csproj.

1

Cá nhân tôi nghĩ rằng bạn nên sử dụng tệp .csproj. Không có nhiều điều xảy ra trong đó bạn sẽ không phải thêm chính mình nếu lăn dự án MSBuild của riêng bạn.

Tuy nhiên, bất kỳ tuyến đường nào bạn quyết định đi, tôi vẫn khuyên bạn không nên thêm MbUnit như một phần của bước xây dựng, nhưng thêm nó dưới dạng bước riêng biệt trong CC.Net. Chạy thử nghiệm đơn vị phải là một phần của chu kỳ CI hàng ngày; tuy nhiên, nó không phải là một phần của mọi công trình xây dựng.

4

Để lại tệp csproj một mình (như bạn nói, bạn không hiểu nó).

Tạo tệp probuild probuild của riêng bạn và gọi csproj (hoặc sln) từ tệp xây dựng chính của bạn thông qua tác vụ msbuild. Yêu cầu máy chủ CI của bạn xây dựng tệp xây dựng của bạn. Điều này làm cho nó dễ dàng hơn để thêm nhiệm vụ trước và sau của riêng bạn (kiểm tra đơn vị, kiểm tra khói SQL script, fxcop/phân tích tĩnh khác, vv) và bạn sẽ không phá vỡ môi trường làm việc của bạn. Nó cũng có nghĩa là bạn có thể làm mục tiêu tùy chỉnh của bạn trong bất cứ điều gì bạn muốn (msbuild/kiến, vv) Có một cái nhìn như MSBuildContrib trên codeplex cho sự tốt đẹp thêm.

Bạn không cần Stuido hình ảnh về xây dựng máy chủ của bạn (unles bạn có dự án triển khai, trừ khi điều này cũng đã được thay đổi kể từ khi tôi nhìn cuối cùng)

+0

Tệp .proj mới có được kiểm tra vào CVS cùng với tệp .csproj không? Hay nó chỉ sống trên máy chủ xây dựng và bên ngoài môi trường kiểm soát nguồn? Độ nghiêng của tôi sẽ là kiểm tra nó, nhưng nếu có những thực hành tốt nhất, tôi muốn theo họ. – jerhinesmith

+1

** Mọi thứ ** được đăng ký. Chúng tôi sử dụng TeamCity build server với một số tác nhân xây dựng. Máy chủ xây dựng chỉ biết 2 (ok nhiều hơn 2) thứ. Nguồn ở đâu (cvs/svn/vss/etc) và tệp nào thực hiện việc xây dựng. (batery thấp có để tiết kiệm) –

+0

Đây là phương pháp mà tôi sử dụng là tốt. Đối với mỗi dự án (trang web, ứng dụng web, ứng dụng, tiện ích mở rộng, v.v.), tôi có kho lưu trữ riêng trong Subversion, tệp .sln của chính nó chứa một hoặc nhiều tệp * proj và một tệp .proj. Tệp .sln được thiết kế để cho phép một để mở toàn bộ điều trong VS và viết/gỡ lỗi mã. Tệp .proj là cho phép CruiseControl hoặc TeamCity thực hiện tích hợp liên tục. –

0

OK, vài điều cần xem ra cho. Định dạng csproj đã thay đổi từ VS2005 thành VS2008. Ngoài ra nếu bạn đang đi với MSBuild, hãy nhớ rằng bạn sẽ không thể xây dựng các tập tin .vdproj (setup); cho rằng bạn cần devenv (VS thực thi). Điều đó nói rằng bạn luôn có thể tạo một nhiệm vụ MSBuild gọi devenv và xây dựng nó cho bạn.

Đối với câu hỏi của bạn có nên tạo tệp csproj của riêng bạn hoặc sử dụng tệp được tạo bởi VS2005 hay không, tôi sẽ đề xuất đường giữa: create your own project template, đáp ứng nhu cầu của bạn và để VS chăm sóc phần còn lại.

3

Tạo tệp dự án của riêng bạn (bất kỳ thứ gì kết thúc bằng * proj được coi là tệp dự án của MSBuild) và gọi công trình của bạn từ đó. Như thế này:

<MSBuild Projects="MySolution.sln" Targets="Clean; Rebuild" Properties="Configuration=$(BuildMode);"> 

Lưu ý rằng msbuild cũng có thể xây dựng sln (giải pháp tập tin) mà không cần bất kỳ thay đổi, mà thường là dễ dàng hơn so với việc một loạt các file csproj ...

+0

Tôi đồng ý. Tôi đã sử dụng cách tiếp cận này trên một số dự án và nó có vẻ hoạt động tốt. –

2

tôi sử dụng cả hai Nant và MSBuild . NAnt đã được nâng cấp với NAntContrib để tôi nhận được msbuild taks. Tôi có thể được thiết lập tạm thời nhưng cho đến nay tôi đã không chạy trong các vấn đề lớn. Điều đó nói rằng tôi cũng không tạo một tệp csproj mới vì tôi sử dụng cùng một csproj/sln mà tôi sử dụng trong VS2008. Xây dựng các dự án với msbuild rất đơn giản hóa các tập lệnh NAnt cũ (chúng tôi đã sử dụng tác vụ csc).

Ghi chú:

  1. Nếu bạn sử dụng Windows Workflow Foundation trong các dự án của bạn, bạn sẽ có khó khăn lớn xây dựng dự án như vậy mà không msbuild.
  2. Không cài đặt VS.NET trên máy xây dựng của bạn. Bạn có thể sử dụng Wix để tạo cài đặt msi.
  3. @Franci Penov: Chạy kiểm tra đơn vị NÊN là một phần của mỗi bản dựng. Bạn có thực sự muốn đợi đến ngày mai để tìm lỗi không? Có một lưu ý phụ: Các bài kiểm tra đơn vị nên chạy rất nhanh.