2009-11-19 22 views
6

Tất cả các hội đồng .NET của tôi sử dụng định dạng 1.0. * Cho số phiên bản của chúng. Giả sử * được thay thế bằng ngày giờ hiện tại, được dịch thành một số. Công thức dịch nó trở lại ngày tháng và thời gian là gì?Tôi có thể dịch các phiên bản lắp ráp mạng không.

+0

Bọ ve? 'DateTime mới (ve dài)' –

+0

Bạn có thể đưa ra một ví dụ về ý nghĩa của bạn không? – CesarGon

+0

Trường hợp bạn biết rằng các * gtes được liên kết với ngày/giờ hiện tại? – David

Trả lời

14

Trong thực tế, tôi đã tìm thấy rằng số lượng xây dựng là số ngày kể từ ngày 1 tháng 1 năm 2000. Việc sửa đổi được số giây kể từ nửa đêm vào ngày hôm đó chia cho 2.

var result = new DateTime(2000, 1, 1); 
result = result.AddDays(buildNumber); 
result = result.AddSeconds(revision * 2); 

Tuy nhiên, như những người khác đã chỉ ra các tài liệu không đảm bảo rằng điều này sẽ luôn luôn là trường hợp.

+0

Cảm ơn! Đó là chính xác những gì tôi cần. –

0

Các phiên bản lắp ráp được ghi lại ở đây: http://msdn.microsoft.com/en-us/library/51ket42z.aspx

Từ quote dưới đây, tôi sẽ nói rằng những gì bạn đang yêu cầu là không thể và thông tin của bạn là không chính xác.

Số phiên bản lắp ráp Mỗi assembly có số phiên bản là một phần của bản sắc . Như vậy, hai hội đồng mà khác nhau theo số phiên bản là được coi là thời gian chạy là các cụm hoàn toàn khác nhau. Số phiên bản Đây là thể chất biểu diễn dưới dạng một chuỗi gồm bốn phần với định dạng sau:

<major version>.<minor version>.<build> number>.<revision> 

Tuy nhiên, ở dưới cùng của trang tôi liên kết với, có thông tin về lắp ráp tùy chỉnh các thuộc tính và một để thiết lập các thuộc tính assembly. Bạn có thể tìm thấy một cái gì đó hữu ích ở đó. Edit - thêm

Tôi đã xem xét các liên kết mà bạn đăng tải trong câu trả lời của bạn để nhận xét của tôi, và điều duy nhất tôi thấy là thế này:

Kết quả của việc này là một xây dựng số được đặt thành số ngày kể từ ngày ngẫu nhiên, ngày bắt đầu được chỉ định và số sửa đổi dựa trên số lượng giây kể từ nửa đêm.

Dựa trên thực tế là nó nói "ngày bắt đầu được chỉ định ngẫu nhiên" tôi sẽ nói rằng bạn đang hỏi là có thể nếu bạn có thể biết ngày bắt đầu ngẫu nhiên là gì, nhưng tôi nghi ngờ có giá trị nỗ lực để tìm hiểu.

không biết xấu hổ cắm cho mã hóa pactices tốt nhất

Bạn muốn được tốt hơn phục vụ được sử dụng kiểm soát sửa đổi và một quá trình tự động xây dựng và sử dụng các bản ghi từ những để xác định ngày xây dựng của một asembly.

2

Phiên bản chuỗi có định dạng này:

<major version>.<minor version>.<build number>.<revision> 

và nếu bạn thiết lập các phiên bản như bạn đã mô tả, để 1.0.*:

Kết quả của việc này là một tập hợp xây dựng số để số ngày kể từ ngày ngẫu nhiên, ngày bắt đầu được chỉ định và số sửa đổi dựa trên số lượng giây kể từ nửa đêm.

Chìa khóa ở đây là "ngẫu nhiên".Vì vậy, bạn có thể dịch bản sửa đổi thành thời gian trong ngày, nhưng có vẻ như bạn sẽ không thể giải quyết nó vào một ngày.

http://msdn.microsoft.com/en-us/library/ms998223.aspx

+0

Thú vị, liên kết MSDN của bạn và liên kết của tôi xung đột với nhau một chút. –

+0

Xin lỗi, @Michael - Tôi đã vô tình chỉnh sửa bài đăng của bạn, sau đó nhận ra lỗi của tôi và xóa các chỉnh sửa của tôi khỏi bài đăng của bạn và tự mình đặt chúng. Nó là một tai nạn. * Xin lỗi * – David

+0

Nhưng +1 với bạn vì có vẻ như kết luận của bạn là cách tôi đọc nó. – David

2

Theo MSDN: "Các gia xây dựng số mặc định hàng ngày Số phiên bản mặc định là ngẫu nhiên.."

Nếu bạn nhìn vào nguồn cho AssemblyVersionAttribute trong phản xạ, bạn sẽ thấy nó không làm gì cả, chỉ chấp nhận chuỗi. Vì vậy, sự kỳ diệu xảy ra với trình biên dịch chính nó, mà theo như tôi có thể nói là không tài liệu bất cứ nơi nào. "Hàng ngày tăng lên" khá mơ hồ, bắt đầu từ điểm nào?

Tôi không mong đợi để có thể sử dụng các phiên bản này với bất kỳ độ tin cậy nào. Nó có lẽ là tốt hơn để căn cứ phiên bản của bạn ra khỏi một nhãn trong một hệ thống kiểm soát nguồn hoặc một cái gì đó như thế.

+0

Và +1 cho bạn. – David

+0

+1 để gắn nhãn trong hệ thống kiểm soát nguồn. – Russell

+0

Độ tin cậy không quan trọng, tôi chỉ cần một cái gì đó. –

0

Thậm chí nếu bạn có thể tính toán ngày/giờ từ số bản dựng được tạo tự động, tôi sẽ không đề xuất nó. Số xây dựng không có nghĩa là cho mục đích đó. Nó chỉ đơn giản có nghĩa là một giá trị được tạo tự động mà bạn có thể phụ thuộc vào để tăng liên tục. Không có logic tiếp theo nào được giả định bởi một ứng dụng tiêu thụ. Nếu bạn muốn một mảnh của số phiên bản để bao gồm một ngày/thời gian đóng dấu, sau đó bạn nên tích hợp logic đó vào quá trình xây dựng của bạn/script/tuy nhiên khác bạn có thể chọn để làm như vậy.

+0

Làm thế nào để bạn biết tôi đang xây dựng logic trên đó? Có lẽ tôi chỉ nhìn vào một DLL và cố gắng để có được một đoán tốt nhất là khi nó được xây dựng. –

+0

Bạn có thể có cả hai: ví dụ 170504 là số ngày càng tăng và cũng là ngày YYMMDD. Bạn _don't_ tăng một bước, nhưng bạn có thể thấy điều đó không bắt buộc. – tenpn

0

tôi sử dụng một kịch bản PostBuild trên cụm tôi gọi UpdateVersion trên AssemblyInfo.cs

Chúng tôi sử dụng định dạng sau cho các phiên bản | Năm | Tháng | ngày | BuildCounter |.

Vì phiên bản cập nhật là mã nguồn mở, bạn có thể sửa đổi nó cho phù hợp.

Tôi đã sửa đổi nó để sử dụng ngày hiện tại và bộ đếm được tăng lên mỗi bản dựng.

Bằng cách này, số phiên bản luôn thay đổi và tôi có thể lấy được ngày từ số phiên bản.

Rất tiện dụng.

0

Bài đăng cũ nhưng hy vọng điều này sẽ cung cấp một tùy chọn (dễ dàng) khác để cập nhật số phiên bản trên bản dựng. Tôi đã sử dụng bước MSBUILD RegexTransform để sửa đổi số phiên bản. Đây là bài đăng tôi thường quay lại khi tôi cần triển khai tính năng này.

http://weblogs.asp.net/srkirkland/archive/2010/12/07/simple-msbuild-configuration-updating-assemblies-with-a-version-number.aspx

Về cơ bản, trong tập tin Proj MSBUILD của bạn, bạn tạo ra một thay đổi trong hồ sơ AssemblyInfo của bạn. Một cái gì đó như:

<ItemGroup> 
    <RegexTransform Include="$(SolutionRoot)\CommonAssemblyInfo.cs"> 
     <Find>(?&lt;major&gt;\d+)\.(?&lt;minor&gt;\d+)\.\d+\.(?&lt;revision&gt;\d+)</Find> 
     <ReplaceWith>$(BUILD_NUMBER)</ReplaceWith> 
    </RegexTransform> 
</ItemGroup> 

nơi BUILD_NUMBER được cung cấp bên ngoài:

msbuild myBuild.proj /p:Configuration="%config%" /p:build_number="%version%" 
0

Trong Roslyn và NET Core, mã nguồn trình biên dịch là bây giờ đã có.

File roslyn/src/Compilers/Core/Portable/VersionHelper.cs (https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/Portable/VersionHelper.cs - từ cam 4f44984 on 2016-04-19) không có logic cùng ngày từ bản gốc csc trong phương pháp GenerateVersionFromPatternAndCurrentTime:

int revision = (int)time.TimeOfDay.TotalSeconds/2; 

// 24 * 60 * 60/2 = 43200 < 65535 
Debug.Assert(revision < ushort.MaxValue); 

// ... 

TimeSpan days = time.Date - new DateTime(2000, 1, 1); 
int build = Math.Min(ushort.MaxValue, (int)days.TotalDays); 

return new Version(pattern.Major, pattern.Minor, (ushort)build, (ushort)revision); 

Tuy nhiên, ý kiến ​​tài liệu chỉ đơn giản nói "một giá trị theo thời gian" mà không cụ thể về cách nó được tạo ra.

Nhưng thực tế, cho đến nay, Build vẫn là ngày kể từ ngày 2000-01-01 và Revisionmột nửa số số giây kể từ nửa đêm.

Điều thú vị là, hành vi này được định nghĩa và xác minh trong các trường hợp thử nghiệm trong VersionHelperTests.cs: https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs

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