2009-02-13 29 views
13

Tôi tự hỏi liệu có cách nào để đồng bộ hóa số xây dựng (20080213.1) mà không sử dụng BuildNumberOverrideTarget nơi tôi sẽ phải tạo số xây dựng của riêng mình không? Về cơ bản, tôi muốn sử dụng trình tạo tfs buildnumber mặc định/tích hợp sẵn nhưng muốn truy cập nó để sắp xếp các phiên bản lắp ráp của tôi với nó. Điều này có thể được thực hiện và nó là một cách hợp lý để làm điều đó theo cách này?Căn chỉnh số phiên bản lắp ráp với TFS Buildnumber

Trả lời

8

Có thể. Tại một số điểm, có thể tại AfterGet, bạn có thể sử dụng BuildNumber và tạo một nhiệm vụ tùy chỉnh để cập nhật các tệp AssemblyInfo.cs trong mã nguồn của bạn.

Chúng tôi đã nối vào AfterGet và gây ra mục tiêu của chúng tôi để được phụ thuộc:

<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" /> 

VersionAssemblies Mục tiêu phấn đấu kéo tất cả các file AssemblyInfo.cs từ $ (SolutionRoot):

<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;"> 
    <Output TaskParameter="Include" ItemName="AssemblyInfos"/> 
</CreateItem> 

kiểm tra chúng ra:

<Exec Command="$(TfCommand) checkout &quot;AssemblyInfo.cs&quot; -r" 
      WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/> 

chỉnh sửa và thay thế phiên bản tệp bằng $ (Buil dNumber):

<File.Replace Path="%(AssemblyInfos.FullPath)" 
        NewValue="AssemblyFileVersion(&quot;$(BuildNumber)&quot;)" 
        RegularExpression="AssemblyFileVersion\(\&quot;(\d+.\d+.\d+.\d+)\&quot;\)" 
        IgnoreCase="true" 
        Force="true"/> 

và sau đó kiểm tra các tập tin lại:

<Exec Command="$(TfCommand) checkin /override:&quot;Automated&quot; /comment:&quot;Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) &quot; /noprompt &quot;AssemblyInfo.cs&quot; /recursive" 
      WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/> 

Đối với việc thay thế các phiên bản tập tin tôi sử dụng nhiệm vụ File.Replace mà đi kèm với Microsoft SDC tasks trên CodePlex. Cũng lưu ý rằng nếu bạn có một build được kích hoạt trên checkin, khi kiểm tra trong file AssemblyInfo.cs, hãy đảm bảo comment có $ (NoCICheckinComment) vì điều này khiến TFS không kích hoạt một build khác nếu không bạn ' sẽ kết thúc trong một vòng lặp xây dựng vô hạn.

+0

Làm thế nào để bạn kéo bản dựng và sửa đổi từ $ (BuildNumber) vì nó theo mặc định của định dạng "MyBuildDefinition_20090213.1"? – Fadeproof

+0

Bạn có thể viết một nhiệm vụ tùy chỉnh để loại bỏ phần MyBuildDefinition_ và loại bỏ nó ra. –

9

Điều bạn đang yêu cầu là rất hợp lý và có một số cách để đạt được điều này.

Cá nhân, khi tôi làm điều này, tôi không muốn kiểm tra các tệp trong điều khiển phiên bản có số máy chủ tạo trong chúng - nó chỉ giới thiệu quá nhiều đầu đau khi hợp nhất mã trên các nhánh nhưng tôi cũng thích một số phiên bản đã biết sẽ được sử dụng khi một nhà phát triển xây dựng một máy trạm và một máy chủ xây dựng có nguồn gốc phù hợp để làm cho nó thực sự dễ dàng để phân biệt chúng.

Để biết thêm thông tin về làm thế nào tôi muốn làm điều đó, hãy nhìn vào wiki TFS Xây dựng recipies:

hoặc bài viết trên blog của tôi về chủ đề

Hy vọng rằng sẽ giúp,

Martin.

+0

Cảm ơn Martin. Tôi đã đi qua bài viết tuyệt vời của bạn trên sự liên kết và đã sử dụng phương pháp đó. Khi bạn nói rằng bạn thích một số phiên bản đã biết sẽ được sử dụng trên nhà phát triển, bạn có nghĩa là số đó sẽ là số từ tệp thông tin lắp ráp mà không có bất kỳ phần ghi đè nào? nói 1.0.0.0? – Fadeproof

+0

Đối với các nhà phát triển, bạn chỉ sử dụng VS build hoặc bạn có sử dụng các script xây dựng mà các lập trình viên nên sử dụng trên các máy trạm của họ không? – Fadeproof

+0

Đối với các nhà phát triển, tôi chỉ sử dụng VS build. Đôi khi tôi sử dụng xây dựng Developer Workstation bằng cách sử dụng kịch bản TeamBuild - tuy nhiên VS xây dựng có xu hướng có thể làm công việc 90% thời gian và làm cho mọi thứ đơn giản hơn nhiều. Trong câu trả lời cho nhận xét trước đó của bạn, tôi thực sự sử dụng 1.0.0.0 trong các tệp AssemblyInfo. –

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