Tôi có thể tự động tăng phiên bản xây dựng tệp khi sử dụng Visual Studio không?


358

Tôi chỉ tự hỏi làm thế nào tôi có thể tự động tăng bản dựng (và phiên bản?) Cho các tệp của mình bằng Visual Studio (2005).

Nếu tôi tra cứu các thuộc tính của nói C:\Windows\notepad.exe, tab Phiên bản sẽ cho "Phiên bản tệp: 5.1.2600.2180". Tôi cũng muốn có được những con số tuyệt vời này trong phiên bản dll của tôi chứ không phải phiên bản 1.0.0.0, điều mà chúng ta phải đối mặt là nó hơi buồn tẻ.

Tôi đã thử một vài thứ, nhưng có vẻ như đó không phải là chức năng vượt trội, hoặc có lẽ tôi chỉ đang tìm sai chỗ (như thường lệ).

Tôi làm việc với các dự án web chủ yếu ....

Tôi nhìn cả hai:

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

và tôi không thể tin rằng rất nhiều nỗ lực để làm một cái gì đó là thực hành tiêu chuẩn.

EDIT: Nó không hoạt động trong VS2005 như tôi có thể nói ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )


1
thẻ đại diện dường như chỉ hoạt động cho hội
đồngVersion

Có giải pháp nào cho việc này hoạt động cho các dự án C ++ trong VS2005 không? Tất cả các câu trả lời dường như chạy lại thành .Net. Câu hỏi liên quan . Cảm ơn
Deanna

Trong các dự án .Net Core, tính năng tự động gia tăng của AssociationVersion không hoạt động theo mặc định. Bạn cần thêm <Xác định> Sai </ Xác định> vào csproj. Xem Phiên bản tự động trong Visual Studio 2017 (.NET Core)
Michael Freidgeim

Câu trả lời:


434

Trong visual Studio 2008, các tác phẩm sau đây.

Tìm tệp AssociationInfo.cs và tìm 2 dòng sau:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Bạn có thể thử thay đổi điều này thành:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

Nhưng điều này sẽ không mang lại cho bạn kết quả mong muốn, bạn sẽ kết thúc với Phiên bản sản phẩm là 1.0. * Và Phiên bản tệp của 1.0.0.0 . Không phải những gì bạn muốn!

Tuy nhiên, nếu bạn loại bỏ dòng thứ hai trong số này và chỉ có:

[assembly: AssemblyVersion("1.0.*")]

Sau đó, trình biên dịch sẽ đặt Phiên bản tệp bằng với Phiên bản sản phẩm và bạn sẽ nhận được kết quả mong muốn của mình về một sản phẩm và phiên bản tệp tăng tự động được đồng bộ hóa. Ví dụ: 1.0.3266.92689


2
Điều này hoạt động tốt như mọi thứ khác, và hoạt động trong VS2005. Tôi đã hy vọng cho một số số hữu tỷ như 1.0.1.56 thay cho tôi nhận được 1.0.3266.30135 nhưng ít nhất nó tăng (mặc dù bằng một số ngẫu nhiên: D)
hứng

14
oh tôi chỉ cần đọc nó: nó sẽ tự động điền vào hai số cuối cùng với ngày (tính theo ngày từ một số điểm) và thời gian (một nửa giây từ nửa đêm)
hứng

20
Cuộc gọi tuyệt vời về việc cần phải loại bỏ thuộc tính AssociationFileVersion để làm việc này!
David Faivre

76
Tôi nhận ra đây là một câu hỏi cũ, nhưng muốn thêm nhận xét này cho những người khác tìm đường đến câu trả lời này. Nếu bạn tăng Hội đồng, bất kỳ dự án nào sử dụng dll của bạn sẽ cần phải được biên dịch lại. Tuy nhiên, nếu bạn giữ cho Hội đồng quản trị giống nhau và tự tăng Hội đồng hội thảo, thì bạn có thể trao đổi dll mới mà không cần phải biên dịch lại bất cứ điều gì đang sử dụng. Vì vậy, hãy tự hỏi điều này, đây chỉ là một bản dựng mới, hay tôi sẽ phát hành một phiên bản mới?
onefootswill

27
@ DD59, 'Build' là số ngày kể từ ngày 1 tháng 1 năm 2000; 'Sửa đổi' là giây từ nửa đêm chia cho 2 (không phải nửa giây, mà là hai giây). Xem tại đây: stackoverflow.com/a/3387167/11545
Cristian Diaconescu

154

mở tập tin AssociationInfo.cs và thay đổi

// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

đến

[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

bạn có thể làm điều này trong IDE bằng cách vào dự án -> thuộc tính -> thông tin lắp ráp

Tuy nhiên, điều này sẽ chỉ cho phép bạn tự động tăng phiên bản hội và sẽ cung cấp cho bạn

Phiên bản tệp hội: Một ký tự đại diện ("*") không được phép trong trường này

hộp thông báo nếu bạn thử đặt dấu * trong trường phiên bản tệp.

Vì vậy, chỉ cần mở assemblyinfo.cs và làm bằng tay.


Có, tôi vừa gặp "" Phiên bản tệp hội đồng: Ký tự đại diện ("*") không được phép trong trường này "đó là những gì đã giành được phương pháp của bạn đánh dấu màu xanh lá cây: D
hứng

3
công việc này: [lắp ráp: hộiVersion ("1.0. *")] // [lắp ráp: hộiFileVersion ("1.0.0.0")]
hứng

4
Không nên thay đổi số hội đồng trong một chu kỳ phát hành. Thay vào đó, nên thay đổi hội đồngFileVersion. Xem bài viết trên blog của tôi về chủ đề này: philippetruche.wordpress.com/2008/08/12/... Xem thêm bài xuất sắc Suzanne Cook trên khi thay đổi các con số: blogs.msdn.com/b/suzcook/archive/2003/05/ 29 / 57148.aspx
Philippe

46
Tôi sẽ cẩn thận khi sử dụng * nó sẽ ngừng hoạt động vào ngày 4 tháng 6 năm 2179 khi ngày trở thành 65536
Lloyd Powell

3
@Shimmy: Thêm <Xác định> Sai </ Xác định> vào .csproj Phiên bản tự động trong Visual Studio 2017 (.NET Core)
Michael Freidgeim

53

Một tùy chọn khác để thay đổi số phiên bản trong mỗi bản dựng là sử dụng tác vụ Phiên bản của MSBuild.Community.T Nhiệm vụ . Chỉ cần tải xuống trình cài đặt của họ, cài đặt nó, sau đó điều chỉnh mã sau đây và dán mã sau <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />vào .csprojtệp của bạn :

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
    <Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="Properties\VersionInfo.cs"
                  AssemblyVersion="$(Major).$(Minor)"
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>

Lưu ý: Điều chỉnh thuộc tính StartDate cho miền địa phương của bạn. Nó hiện không sử dụng văn hóa bất biến.

Đối với bản dựng thứ ba vào ngày 14 tháng 1 năm 2010, điều này tạo ra một VersionInfo.csnội dung này:

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]

Tập tin này sau đó phải được thêm vào dự án (thông qua Thêm mục hiện có ) và các dòng AssemblyVersionAssemblyFileVersionphải được xóa khỏi AssemblyInfo.cs.

Các thuật toán khác nhau để thay đổi các thành phần phiên bản được mô tả trong $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chmThuộc tính phiên bản .


2
Đây là cách tốt nhất mà tôi từng thấy để giải quyết sự thật khủng khiếp rằng các cấu trúc FileVersion sử dụng các số nguyên 16 bit.
Mike Post

1
Tôi gặp sự cố khi cài đặt vào VS2012 bằng Bảng điều khiển gói, vì vậy khuyên bạn nên sử dụng trình cài đặt msi hàng đêm đã tải xuống tại github.com/loresoft/msbuildt task / doads . Hoạt động sao chép / dán từ trên. Cảm ơn!
DaveO

Sau khi nó bị từ chối và chỉnh sửa trên bài đăng này: "Bạn cũng có thể muốn kiểm tra loresoft.com/projects/msbuildt task / này, nó có thể cải thiện chức năng cơ bản được mô tả trước đây."
radu florescu

1
Đây không phải là một giải pháp khả thi cho những người xây dựng với TFS. Cuối cùng, điều này sẽ thêm một chỉnh sửa đang chờ xử lý vào các tệp VersionInfo.cs và version.txt. Đối với tôi, không mong muốn có một chỉnh sửa đang chờ xử lý cho mỗi bản dựng.
JDennis

@JDennis xem tại đây để biết các mẹo tạo phiên bản TFS ...
Christian

25

Tôi đã đưa ra một giải pháp tương tự như Kitô hữu nhưng không phụ thuộc vào các nhiệm vụ Cộng đồng MSBuild, đây không phải là một lựa chọn cho tôi vì tôi không muốn cài đặt các tác vụ này cho tất cả các nhà phát triển của chúng tôi.

Tôi đang tạo mã và biên dịch thành một hội và muốn tự động tăng số phiên bản. Tuy nhiên, tôi không thể sử dụng thủ thuật VS 6.0. * Hội thảo vì nó tự động tăng số lượng xây dựng mỗi ngày và phá vỡ tính tương thích với các Hội đồng sử dụng số bản dựng cũ hơn. Thay vào đó, tôi muốn có một AssociationVersion được mã hóa cứng nhưng một AssociationFileVersion tự động tăng. Tôi đã hoàn thành việc này bằng cách chỉ định Hội đồng trong phần mềmInInfo.cs và tạo VersionInfo.cs trong MSBuild như thế này,

  <PropertyGroup>
    <Year>$([System.DateTime]::Now.ToString("yy"))</Year>
    <Month>$([System.DateTime]::Now.ToString("MM"))</Month>
    <Date>$([System.DateTime]::Now.ToString("dd"))</Date>
    <Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
    <AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
    </WriteLinesToFile>
  </Target>

Điều này sẽ tạo ra một tệp VersionInfo.cs với thuộc tính hội cho AssociationFileVersion trong đó phiên bản tuân theo lược đồ của YY.MM.DD.TTTT với ngày xây dựng. Bạn phải bao gồm tệp này trong dự án của bạn và xây dựng với nó.


MSBuild có hỗ trợ các biến không? Sẽ tốt hơn nếu đặt [System.DateTime]::Nowvào một, nếu không, có một điều kiện chủng tộc có thể khiến một số bản dựng cũ được sử dụng nếu tòa nhà gần nửa đêm.
Edward Brey

Bạn đã xác định bốn thuộc tính này thay vì kết hợp chúng trong một DateTime.ToStringmục đích duy nhất cho mục đích trình diễn, hoặc có một lý do cụ thể?
mafu

Nếu sự kiện BeforeBuild của bạn không kích hoạt trong VS2017, hãy kiểm tra stackoverflow.com/questions/43921992/
Rhys Jones

Giải pháp này là phù hợp nhất trong tất cả các câu trả lời ở đây. Tuy nhiên, vấn đề là, dấu thời gian (hoặc nội dung của tệp versioninfo.cs) không cập nhật nếu bạn xây dựng dự án lần thứ hai sẽ tạo ra một phút khác. Nếu tôi đóng và tải lại dự án, thì dấu thời gian sẽ được cập nhật. Đây có phải là một lỗi từ MSBuild? @Boog
Cary

16

Cài đặt bổ trợ Tăng phiên bản xây dựng . Nó cho phép bạn kiểm soát nhiều hơn so với tùy chọn *.


Chỉ dành cho VS2005 / 2008, với bản beta cho VS2010
SteveC

autobuildversion.codeplex.com/discussions/393154 Liên kết DropBox gần cuối chuỗi, từ r3mote203, dành cho năm 2010 và hoạt động vào năm 2012 (và có thể 2013).
Grault

2
Tôi đang sử dụng Phiên bản tự động cho VS2012 và nó hoạt động rất tốt.
redcurry 20/07/2015

12

Để lấy số phiên bản hãy thử

 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
 System.Reflection.AssemblyName assemblyName = assembly.GetName();
 Version version = assemblyName.Version;

Để đặt số phiên bản, hãy tạo / chỉnh sửa AssociationInfo.cs

 [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyFileVersion("1.0.*")]

Cũng như một lưu ý phụ, số thứ ba là số ngày kể từ ngày 2/1/2000 và số thứ tư là một nửa tổng số giây trong ngày. Vì vậy, nếu bạn biên dịch vào nửa đêm thì nó sẽ bằng không.


12

Có một phần mở rộng studio hình ảnh Phiên bản tự động hỗ trợ Visual Studio (2012, 2013, 2015) 2017 & 2019.

Ảnh chụp màn hình nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Vì vậy, tôi đã gỡ cài đặt nó và tôi có thể nói nhiều hơn nữa ... nó sửa đổi tệp csproj gốc. Tôi nghĩ rằng nó là vấn đề mở rộng rất có vấn đề.
Maxim

2
@Maxim Hãy thử phiên bản mới nhất, nó sẽ hoạt động trên VS 2017
Rady

Tuyệt vời tận dụng. Hoạt động tốt cho tôi trong vs2017. Tài liệu có thể rõ ràng hơn một chút, nhưng cài đặt nó (thông qua trang web) và sau đó cài đặt MSBuild qua Nuget, áp dụng cho một dự án nhỏ và chơi và xây dựng. Đẹp. Câu trả lời của @ Boog không hiệu quả với tôi mặc dù anh ấy nói chính xác những gì tôi đang cố gắng đạt được.
err1

8

Đặt dấu * trong số phiên bản trong AssociationInfo hoặc theo thuộc tính dự án như được mô tả trong các bài đăng khác không hoạt động với tất cả các phiên bản của Visual Studio / .NET.

Afaik nó không hoạt động trong VS 2005 (nhưng trong VS 2003 và VS 2008). Đối với VS 2005, bạn có thể sử dụng các tùy chọn sau: Số phiên bản xây dựng và số sửa đổi Auto Increment Visual Studio 2005 vào thời gian biên dịch .

Nhưng hãy lưu ý rằng việc thay đổi số phiên bản tự động không được khuyến nghị cho các hội đồng có tên mạnh. Lý do là tất cả các tham chiếu đến một hội đồng như vậy phải được cập nhật mỗi khi lắp ráp tham chiếu được xây dựng lại do thực tế là các tham chiếu lắp ráp có tên mạnh luôn là một tham chiếu đến một phiên bản lắp ráp cụ thể. Microsoft tự thay đổi số phiên bản của các cụm .NET Framework nếu có thay đổi trong giao diện. (NB: Tôi vẫn đang tìm kiếm liên kết trong MSDN nơi tôi đọc nó.)


Tôi nghĩ rằng đối với bất kỳ phiên bản VS nào, bạn chỉ có thể đặt dấu * vào hộp Xây dựng hoặc Sửa đổi. Tôi mới thử sử dụng VS 2005 và nó hoạt động tốt. Tôi không chắc tác giả của bài báo dự án mã đó đang nói về cái gì.
MusiGenesis

Có thể nó đã trở lại với gói dịch vụ, nhưng tôi nhớ rằng nó không sử dụng để hoạt động khi tôi đang sử dụng VS 2005.
Dirk Vollmar

Nó không hoạt động với năm 2005, tôi sẽ tìm gói dịch vụ và báo cáo lại.
hứng

Có thể MusiGenesis đã cài đặt tiện ích bổ sung cho phép tạo phiên bản tự động.
Dirk Vollmar

@divo: không, tôi là add-on-phobic. Tôi chỉ có Visual Studio 2005 Professional SP1. Tôi chưa bao giờ thấy vấn đề với *, nhưng tôi thường tăng theo cách thủ công. Âm thanh như một lỗi kỳ lạ.
MusiGenesis

6

Để có được thông tin gia tăng (DateTime) vào thuộc tính AssociationFileVersion có lợi thế là không phá vỡ bất kỳ phụ thuộc nào.


Xây dựng dựa trên giải pháp của Boog (không phù hợp với tôi, có thể vì VS2008?), Bạn có thể sử dụng kết hợp sự kiện dựng sẵn tạo tệp, thêm tệp đó (bao gồm cả thuộc tính phiên bản của nó) và sau đó sử dụng cách đọc những giá trị đó một lần nữa. Đó là..

Sự kiện tiền xây dựng:

echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs

Bao gồm tệp VersionInfo.cs (thư mục con thuộc tính) vào dự án của bạn

Mã để lấy lại ngày (năm giảm xuống giây):

var version = assembly.GetName().Version;
var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
Version fileVersion = new Version(fileVersionString);
var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);

Không thoải mái lắm .. ngoài ra, tôi không biết liệu nó có tạo ra nhiều lực lượng xây dựng lại không (vì một tệp luôn thay đổi).

Ví dụ, bạn có thể làm cho nó thông minh hơn nếu bạn chỉ cập nhật tệp VersionInfo.cs cứ sau vài phút / giờ (bằng cách sử dụng tệp tạm thời và sau đó sao chép / ghi đè lên VersionInfo.cs thực sự nếu phát hiện thay đổi đủ lớn). Tôi đã làm điều này một lần khá thành công.


Nó hoạt động hoàn hảo. Tuy nhiên, biểu thức chính quy này% ngày: ~ -4,4%.% Ngày: ~ -7,2 %% ngày: ~ -10,2%.% Thời gian: ~ 0,2 %% thời gian: ~ 3,2% .% time: ~ -5,2% "quá phức tạp.
Cary

5

Đặt số phiên bản thành "1.0. *" Và nó sẽ tự động điền vào hai số cuối cùng với ngày (tính theo ngày từ một số điểm) và thời gian (một nửa giây từ nửa đêm)


này, nếu tôi đã đọc đúng điều này ngay từ đầu, tôi sẽ tự cứu mình. thx
hứng


4

Cake hỗ trợ vá các tập tin lắp ráp. Với bánh trong tay, bạn có vô số cách để thực hiện tăng phiên bản tự động.

Ví dụ đơn giản về phiên bản tăng dần như trình biên dịch C # hiện:

Setup(() =>
{
    // Executed BEFORE the first task.
    var datetimeNow = DateTime.Now;
    var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
    var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
    var assemblyInfo = new AssemblyInfoSettings
    {
        Version = "3.0.0.0",
        FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
    };
    CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});

Đây:

  • Phiên bản - là phiên bản lắp ráp. Cách thực hành tốt nhất là khóa số phiên bản chính và để lại số 0 (như "1.0.0.0").
  • FileVersion - là phiên bản tập tin lắp ráp.

Lưu ý rằng bạn có thể vá không chỉ các phiên bản mà còn tất cả các thông tin cần thiết khác .


3

Đi đến dự án | Thuộc tính và sau đó là Thông tin lắp ráp và sau đó là Phiên bản lắp ráp và đặt dấu * vào hộp cuối cùng hoặc từ thứ hai đến cuối cùng (bạn không thể tự động tăng các thành phần Chính hoặc phụ).


2

Sử dụng tác vụ hội nghịInfo từ các nhiệm vụ cộng đồng MSBuild ( http: // msbuildt task.tigris.org/ AssociationInfo từ dự án msbuildt task.tigris.org/) và tích hợp nó vào tệp .csproj / .vbproj của bạn.

Nó có một số tùy chọn, bao gồm một tùy chọn để buộc số phiên bản vào ngày và giờ trong ngày.

Đề nghị.


2

Ngay bây giờ, cho ứng dụng của tôi,

string ver = Application.ProductVersion;

trả lại ver = 1.0.3251.27860

Giá trị 3251 là số ngày kể từ 1/1/2000. Tôi sử dụng nó để đặt ngày tạo phiên bản trên màn hình của ứng dụng. Khi giao dịch với người dùng, tôi có thể hỏi ngày tạo dễ giao tiếp hơn một số dài.

(Tôi là một người đàn ông duy nhất hỗ trợ một công ty nhỏ. Cách tiếp cận này có thể không hiệu quả với bạn.)


Số của bạn sẽ hết nhanh chóng. Tôi sẽ sử dụng yyddd là 2 chữ số năm và 3 chữ số kể từ đầu năm tối đa 365. ít nhất chương trình của bạn sẽ biên dịch cho đến năm 2065. sau đó bạn sẽ nghỉ hưu và để người khác tìm ra cách họ muốn xử lý nó. cho chương trình của bạn vẫn còn trong hoa hồng vào ngày đó!
AaA

2

Thay đổi công cụ lắp ráp trong VS2012. Có vẻ lạ khi không có nhiều hỗ trợ hơn cho điều này trong Visual Studio, bạn sẽ nghĩ rằng đây là một phần cơ bản của quá trình xây dựng / phát hành.


2

Cách lấy phiên bản {major}.{year}.1{date}.1{time}

Đây là một loại thử nghiệm, nhưng tôi thích nó. Lấy cảm hứng từ Jeff Atwood @ CodingHorror ( liên kết ).

Số phiên bản kết quả trở thành 1.2016.10709.11641(có nghĩa là 2016-07-09 16:41), cho phép

  • người nghèo không đệm (với những người dẫn đầu ngu ngốc 1)
  • gần con người có thể đọc được địa phương DateTime nhúng vào số phiên bản
  • để lại phiên bản chính cho những thay đổi thực sự lớn.

Thêm một mục mới vào dự án của bạn, chọn Chung -> Mẫu văn bản, đặt tên cho nó một cái gì đó giống như CustomVersionNumbervà (nếu có) nhận xét ra AssemblyVersionAssemblyFileVersiontrong Properties/AssemblyInfo.cs.

Sau đó, khi lưu tệp này hoặc xây dựng dự án, điều này sẽ tạo lại một .cstệp nằm dưới dạng một mục con bên dưới .tttệp đã tạo .

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>

//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//

using System.Reflection;

<#
    var date = DateTime.Now;
    int major = 1;
    int minor = date.Year;
    int build = 10000 + int.Parse(date.ToString("MMdd"));
    int revision = 10000 + int.Parse(date.ToString("HHmm"));
#>

[assembly: AssemblyVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
[assembly: AssemblyFileVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]

Bạn không biên dịch chương trình của mình mỗi phút hoặc triển khai nhiều hơn một lần một ngày, vì vậy về mặt kỹ thuật, phần thời gian chiếm dụng thông tin có giá trị một cách không cần thiết, tôi sẽ sử dụng số 1 và số 2 cho số thứ yếu và chỉ sử dụng số thứ 3 cho ngày yyddd (hai chữ số năm + ngày ddd từ đầu năm) và để lại lần thứ 4 cho số lần xây dựng tăng dần.
AaA

2

Tôi đã tạo một ứng dụng để tăng phiên bản tệp tự động.

  1. Tải ứng dụng
  2. thêm dòng sau vào dòng lệnh sự kiện dựng sẵn

    C: \ temp \ IncrementFileVersion.exe $ (SolutionDir) \ Properties \ AssociationInfo.cs

  3. Xây dựng dự án

Để đơn giản, ứng dụng chỉ ném các thông báo nếu có lỗi, để xác nhận nó hoạt động tốt, bạn sẽ cần kiểm tra phiên bản tệp trong 'Thông tin hội'

Lưu ý: Bạn sẽ phải tải lại giải pháp trong Visual studio cho nút 'Thông tin hội' để điền vào các trường, tuy nhiên tệp đầu ra của bạn sẽ có phiên bản cập nhật.

Đối với các đề xuất và yêu cầu xin vui lòng gửi email cho tôi tại telson_alva@yahoo.com


2

Trong Visual Studio 2019

Nó không đủ để tôi thêm

[assembly: AssemblyVersion("1.0.*")]

Khi xây dựng nó ném cho tôi lỗi này

Chuỗi phiên bản đã chỉ định không tuân theo định dạng được yêu cầu

Giải pháp

Định dạng cuối cùng đã được chấp nhận sau khi tôi đặt Deterministicđể Falseproject.csproj

<Deterministic>false</Deterministic>

Biên tập:

Đối với một số lý do thiết lập DeterministicđểFalse làm rối tập tin cấu hình của tôi khi tải nó và lưu nó vào các vị trí khác nhau.

Cách giải quyết:

Tôi thiết lập một sự kiện hậu xây dựng để tăng số sửa đổi:

Kịch bản lô sự kiện sau khi xây dựng

Điều này gọi một kịch bản powershell có tên là autoincrement_version.ps1chuyền như đối số đường dẫn củaAssemblyInfo.cs

if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)

Kịch bản Poweshell

Nó tự động điều chỉnh số sửa đổi bằng Regex

param( [string]$file );
  $regex_revision = '(?<=Version\("(?:\d+\.)+)(\d+)(?="\))'
  $found = (Get-Content $file) | Select-String -Pattern $regex_revision
  $revision = $found.matches[0].value
  $new_revision = [int]$revision + 1
  (Get-Content $file) -replace $regex_revision, $new_revision | Set-Content $file -Encoding UTF8

1

Có thể, đối với tác vụ này, bạn có thể sử dụng mã như thế này:

    private bool IncreaseFileVersionBuild()
    {
        if (System.Diagnostics.Debugger.IsAttached)
        {
            try
            {
                var fi = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.GetDirectories("Properties")[0].GetFiles("AssemblyInfo.cs")[0];
                var ve = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
                string ol = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + ve.FileBuildPart.ToString() + "." + ve.FilePrivatePart.ToString();
                string ne = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + (ve.FileBuildPart + 1).ToString() + "." + ve.FilePrivatePart.ToString();
                System.IO.File.WriteAllText(fi.FullName, System.IO.File.ReadAllText(fi.FullName).Replace("[assembly: AssemblyFileVersion(\"" + ol + "\")]", "[assembly: AssemblyFileVersion(\"" + ne + "\")]"));
                return true;
            }
            catch
            {
                return false;
            }
        }
        return false;
    }

và gọi nó từ tải mẫu.
Với mã này, bạn có thể cập nhật bất kỳ phần nào của thông tin tệp trong hội nghịInInfo.cs (nhưng bạn phải sử dụng cấu trúc thư mục "tiêu chuẩn").




1

Có lẽ đã quá muộn để trả lời ở đây nhưng hy vọng điều đó sẽ giải quyết vấn đề bận rộn của ai đó.

Một cách tự động để thay đổi phiên bản lắp ráp của tất cả các dự án của bạn bằng cách sử dụng tập lệnh PowerShell. Bài viết này sẽ giải quyết nhiều vấn đề của bạn.


Vấn đề duy nhất với PS là nó phản ứng chậm và yêu cầu cấu hình để cho phép nó chạy. Tôi sẽ đi với một tệp thực thi nhỏ, một tệp tt4 hoặc thậm chí mã nội tuyến mà tôi nghĩ rằng bất kỳ lập trình viên nào cũng có thể viết theo một cách.
AaA

0

Mỗi lần tôi thực hiện một bản dựng, nó sẽ tự động tăng chữ số có nghĩa ít nhất.

Tôi không biết làm thế nào để cập nhật những cái khác, nhưng ít nhất bạn nên thấy điều đó ...


1
VS chịu trách nhiệm tăng số cuối cùng thường là số bản dựng. Mọi thứ khác (tức là các số trước đó) tùy thuộc vào bạn vì chúng đại diện cho phiên bản ứng dụng của bạn.
Trả lời

1
Ш: Không hoàn toàn đúng. Sơ đồ đánh số của Microsoft là Major.minor.build.revision, ví dụ 1.0.4.7. Nếu bạn đặt phiên bản lắp ráp thành một cái gì đó như "1.0. *" Thì VS sẽ đặt số bản dựng và sửa đổi cho bạn. Trong trường hợp đó, quá trình xây dựng sẽ tăng lên hàng ngày và sửa đổi sẽ là số giây kể từ nửa đêm, chia cho 2.
Simon Tewsi

0

Đối với bất kỳ ai sử dụng Rùa Subversion, bạn có thể buộc một trong các số phiên bản của mình với số Sửa đổi lật đổ của mã nguồn. Tôi thấy điều này rất hữu ích (Kiểm toán viên cũng thực sự thích điều này!). Bạn làm điều này bằng cách gọi tiện ích WCREV trong bản dựng trước của bạn và tạo Hội nghịInfo.cs của bạn từ một mẫu.

Nếu mẫu của bạn được gọi là AssociationInfo.wcrev và nằm trong thư mục AssociationInfo.cs bình thường và rùa nằm trong thư mục cài đặt mặc định, thì lệnh Pre-Build của bạn sẽ trông như thế này (NB All on one line):

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev"  "$(ProjectDir)Properties\AssemblyInfo.cs"

Tệp mẫu sẽ bao gồm chuỗi thay thế mã thông báo wcrev: $ WCREV $
eg

[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

Ghi chú:
Vì hội đồngInfo.cs của bạn hiện được tạo nên bạn không muốn phiên bản được kiểm soát.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.