2010-01-08 33 views
20

Tôi muốn điều chỉnh đầu ra từ cấu hình xây dựng TeamCity của thư viện lớp để các tệp dll được tạo có số phiên bản sau: 3.5.0.x, trong đó x là số sửa đổi lật đổ mà TeamCity đã chọn.Làm cho TeamCity tích hợp số xây dựng Subversion vào phiên bản lắp ráp

Tôi đã tìm thấy rằng tôi có thể sử dụng biến môi trường BUILD_NUMBER để nhận x, nhưng tiếc là tôi không hiểu tôi cần phải làm gì khác.

"Hướng dẫn" tôi tìm thấy tất cả nói "Bạn chỉ thêm đoạn mã này vào kịch bản", nhưng không nói đoạn mã và "this" thường đề cập đến nhiệm vụ AssemblyInfo từ Tiện ích cộng đồng MSBuild.

Tôi có cần xây dựng kịch bản MSBuild tùy chỉnh bằng cách nào đó để sử dụng không? Có phải "tập lệnh" giống như tệp giải pháp hoặc tệp dự án C# không?

Tôi không biết nhiều về quy trình MSBuild, ngoại trừ việc tôi có thể chuyển trực tiếp tệp giải pháp cho MSBuild, nhưng những gì tôi cần thêm vào "tập lệnh" là XML và tệp giải pháp đã quyết định không trông giống như XML.

Vì vậy, bất kỳ ai cũng có thể chỉ cho tôi hướng dẫn từng bước về cách thực hiện công việc này?


Đây là những gì tôi đã kết thúc với:

  1. Cài đặt MSBuild Community Tasks
  2. Chỉnh sửa các tập tin csproj của lớp thư viện lõi của tôi, và thay đổi phía dưới để nó đọc:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
    <Target Name="BeforeBuild"> 
        <AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' " 
         CodeLanguage="CS" 
         OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs" 
         AssemblyVersion="3.5.0.0" 
         AssemblyFileVersion="$(BUILD_NUMBER)" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    

  3. Thay đổi tất cả các tập tin AssemblyInfo.cs của tôi để họ không chỉ định hoặc AssemblyVersion hoặc AssemblyFileVersion (nhìn lại, tôi sẽ xem xét đưa AssemblyVersion trở lại)

  4. Đã thêm liên kết đến GlobalInfo.cs toàn cầu hiện nay bên ngoài tất cả các dự án
  5. Hãy chắc chắn rằng tập tin này được xây dựng một lần, vì vậy mà tôi có một tập tin mặc định trong kiểm soát nguồn

này bây giờ sẽ cập nhật GlobalInfo.cs chỉ khi biến môi trường BUILD_NUMBER được thiết lập, mà nó là khi tôi xây dựng thông qua TeamCity.

Tôi đã chọn lưu giữ tham số AssemblyVersion, do đó tài liệu tham khảo vẫn hoạt động và chỉ cập nhật AssemblyFileVersion, để tôi có thể xem tệp nào tạo từ dll.

Trả lời

18

Tệp CSPROJ có hiệu quả là tệp MSBuild.

Dỡ bỏ dự án lớp có liên quan trong VS.NET, chỉnh sửa và bỏ ghi chú mục tiêu BeforeBuild. Thêm nhiệm vụ MSBuild FileUpdate từ Tiện ích mở rộng cộng đồng MSBuild.

Trong tệp MSBuild của bạn, bạn có thể truy xuất BUILD_NUMBER từ TeamCity bằng cách sử dụng biến môi trường $(build_vcs_number_1). Lưu ý rằng bạn có thể muốn tạo Cấu hình bổ sung cho 'Sản xuất' mà 'điều kiện bạn kiểm tra, vì điều này rõ ràng sẽ không hoạt động khi bạn xây dựng cục bộ.

Chỉ cần sử dụng làm đầu vào cho thuộc tính ReplacementText của nhiệm vụ FileUpdate.

Lưu ý rằng nếu số phiên bản của bạn vượt quá mốc 65535 (UInt16), bạn không thể sử dụng nó trong thuộc tính AssemblyVersion.

Điều tôi khuyên bạn nên sử dụng thay vào đó là AssemblyInformationalVersion, chỉ là một chuỗi không có giới hạn đó. Trừ khi tất nhiên bạn tự tin rằng bạn sẽ không nhấn ranh giới trên sửa đổi này, nhưng điều đó có vẻ là một cách tinh ranh của việc đi về nó.

Hoặc, bạn có thể đưa ra một cách (a.b.c.d là số phiên bản của bạn) bằng cách sử dụng bản chỉnh sửa div 1000 cho c và sửa đổi mod 1000 cho d.

12

Trong TeamCity 6.5, đây là VERY EASY để đạt được sử dụng AssemblyInfo patcher.

  • Đi tới bước cấu hình xây dựng 3 "Các bước xây dựng";
  • Nhấp vào "Thêm tính năng xây dựng";
  • Chọn loại tính năng "AssemblyInfo patcher";
  • Cho biết bạn muốn làm phiên bản nào. Tôi sử dụng: %system.build.number%
+1

Thật không may, patcher của họ không [hiện] (http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher) cho phép một để xác định rõ rệt 'AssemblyVersion' và giá trị 'AssemblyFileVersion' . – ladenedge

+1

Đề xuất của bạn rất hữu ích trong các trường hợp mà mối quan tâm chính là có thể theo dõi số bản dựng: cảm ơn! – faester

+1

Người đàn ông tôi sắp sửa tạo ra rất nhiều mã scheiss boilerplate chỉ để lấy mã này vào mã của tôi. Bạn đã lưu tôi 2 hoặc 3 ngày làm việc! –

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