Chúng tôi thực hiện việc này với xUnit.net cho các bản dựng tự động của chúng tôi. Chúng tôi sử dụng CruiseControl.net
(và đang thử TeamCity). Tác vụ MSBuild mà chúng ta chạy để tích hợp liên tục sẽ tự động thay đổi số xây dựng cho chúng ta, do đó tệp ZIP xây dựng kết quả chứa một tập hợp các tệp DLL và EXE được phiên bản đúng.
chúng tôi MSBuild file chứa một tham chiếu UsingTask cho một DLL mà không thay thế biểu thức chính quy: (bạn đang chào đón để sử dụng DLL này, vì nó được bao phủ bởi giấy phép MS-PL cũng)
<UsingTask
AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
TaskName="CodePlex.MSBuildTasks.RegexReplace"/>
Tiếp theo, chúng tôi trích xuất số bản dựng, được cung cấp tự động bởi hệ thống CI. Bạn cũng có thể yêu cầu nhà cung cấp kiểm soát nguồn cung cấp số phiên bản nguồn nếu bạn muốn, nhưng chúng tôi thấy rằng xây dựng # trong hệ thống CI hữu ích hơn, vì không chỉ có thể thấy kết quả tích hợp bằng số CI xây dựng, liên kết quay lại (các) changeset được bao gồm trong bản dựng.
<!-- Cascading attempts to find a build number -->
<PropertyGroup Condition="'$(BuildNumber)' == ''">
<BuildNumber>$(BUILD_NUMBER)</BuildNumber>
</PropertyGroup>
<PropertyGroup Condition="'$(BuildNumber)' == ''">
<BuildNumber>$(ccnetlabel)</BuildNumber>
</PropertyGroup>
<PropertyGroup Condition="'$(BuildNumber)' == ''">
<BuildNumber>0</BuildNumber>
</PropertyGroup>
(Chúng tôi cố gắng BUILD_NUMBER, đó là từ TeamCity, sau đó ccnetlabel, đó là từ CC.net, và nếu không phải là hiện tại, chúng tôi mặc định 0, để chúng ta có thể kiểm tra xây dựng kịch bản tự động bằng tay.)
Tiếp theo, chúng ta có một nhiệm vụ mà đặt số xây dựng thành một file GlobalAssemblyInfo.cs mà chúng ta liên kết vào tất cả các dự án của chúng tôi:
<Target Name="SetVersionNumber">
<RegexReplace
Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
Replacement='AssemblyVersion("$1.$(BuildNumber)")'
Files='GlobalAssemblyInfo.cs'/>
<Exec Command="attrib -r xunit.installer\App.manifest"/>
</Target>
này tìm thấy thuộc tính AssemblyVersion và thay thế số phiên bản abcd với abcBuildNumber. Chúng tôi thường sẽ để lại nguồn kiểm tra vào cây với ba phần đầu tiên của số người xây dựng cố định, và thứ tư ở số không (ví dụ, hôm nay là 1.0.2.0).
Trong quá trình xây dựng, hãy đảm bảo tác vụ SetVersionNumber đứng trước tác vụ xây dựng của bạn. Cuối cùng, chúng tôi sử dụng tác vụ Zip để nén kết quả xây dựng để chúng tôi có lịch sử các tệp nhị phân cho mỗi bản dựng tự động.
[http://stackoverflow.com/questions/29802/how-do-you-do-version-a-web-application#30168][1] [1]: http://stackoverflow.com/questions/29802/how-do-you-do-version-a-web-application#30168 – Azhar
@Balloon Nếu bạn đang sử dụng TortoiseSVN, bạn có thể sử dụng [SubWCRev] được đóng gói (http: //tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html) chương trình. Nó truy vấn một bản sao làm việc và chỉ cho bạn biết số sửa đổi cao nhất. Phải thừa nhận rằng, điều này dường như là một cách tiếp cận phía máy khách đối với một vấn đề phía máy chủ, nhưng vì nó là một chương trình dòng lệnh tốt, bạn sẽ có thể nắm bắt đầu ra của nó để sử dụng khá dễ dàng. – nickf
Nếu bạn không sử dụng TortoiseSVN cho SubWCRev như tôi đã nói [ở đây] (http://stackoverflow.com/questions/163/how-do-i-sync-the-svn-revision-number-with-my-aspnet -web-site # 65747), bạn có thể sử dụng [svnversion] (http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.ref.svnversion). – nickf