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.
Trả lời
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.
Cảm ơn! Đó là chính xác những gì tôi cần. –
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.
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.
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. –
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
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
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ế.
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.
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. –
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
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.
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.
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>(?<major>\d+)\.(?<minor>\d+)\.\d+\.(?<revision>\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%"
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à Revision
là mộ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
- 1. Không thể tải phiên bản lắp ráp cho chân trang
- 2. Lấy Phiên bản Lắp ráp từ AssemblyInfo.cs
- 3. Làm cách nào để có phiên bản lắp ráp?
- 4. Breeze.js thất bại với Không thể tải tệp hoặc lắp ráp System.Web.Http.OData, Phiên bản = 4.0.0.0
- 5. Căn chỉnh số phiên bản lắp ráp với TFS Buildnumber
- 6. Lắp ráp Maven: lắp ráp
- 7. Làm thế nào để remap phiên bản lắp ráp
- 8. Lỗi: Không thể tải log4net lắp ráp
- 9. Có thể lắp ráp C# .dll có điểm vào không?
- 10. Tôi làm cách nào để có thể lắp ráp?
- 11. Unload CodeDom biên dịch lắp ráp
- 12. Làm cách nào tôi có thể biên dịch thành lắp ráp với gcc
- 13. Lắp ráp 'SomeAssembly, sử dụng' System.Web.Mvc, Phiên bản = 4.0.0.0, có phiên bản cao hơn so với phiên bản được tham chiếu 'System.Web.Mvc, Phiên bản 3.0.0.0
- 14. lắp ráp đâm asp.net của tôi 4.0
- 15. ASP.NET tham nhũng lắp ráp "Không thể tải tập tin hoặc lắp ráp App_Web_ *"
- 16. Lỗi lắp ráp Linux "không thể ràng buộc trong" asm ""
- 17. Không thể tải lắp ráp, ngoại lệ từ HRESULT: 0x80131040
- 18. Phiên bản lắp ráp có thể được cập nhật tự động với mỗi TFS 2010 Build không?
- 19. Chúng ta có thể thêm một ký tự phụ với giá trị nhỏ của phiên bản lắp ráp không?
- 20. Không thể tải tệp hoặc lắp ráp Microsoft.ApplicationServer.Caching.Core
- 21. Lắp ráp Microsoft.Windows.Themes của tôi ở đâu?
- 22. Học lắp ráp ARM
- 23. Lắp ráp theo Byte
- 24. Không thể tải tập tin hoặc lắp ráp Newtonsoft.json.dll
- 25. Không thể tải tệp hoặc lắp ráp EntityFramework
- 26. Không thể tải tập tin hoặc lắp ráp 'log4net
- 27. Lắp ráp đường vòng và lắp ráp GCC (Linux)
- 28. Tôi có thể tìm các công cụ để học lắp ráp trên OS X ở đâu?
- 29. Không tìm thấy lắp ráp NUnit
- 30. Không thể tải tệp hoặc lắp ráp NHibernate.XmlSerializers
Bọ ve? 'DateTime mới (ve dài)' –
Bạn có thể đưa ra một ví dụ về ý nghĩa của bạn không? – CesarGon
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