2009-11-19 5 views
6

मेरी .NET विधानसभाओं के सभी अपने संस्करण संख्या के लिए 1.0 स्वरूप का उपयोग करता। *। माना जाता है कि * वर्तमान दिनांक और समय के साथ प्रतिस्थापित हो जाता है, जिसका अनुवाद किसी संख्या में किया जाता है। इसे दिनांक और समय में वापस अनुवाद करने के लिए सूत्र क्या है?क्या मैं .NET असेंबली संस्करणों को तारीखों में अनुवाद कर सकता हूं?

+0

Ticks? 'नया डेटटाइम (लंबी टिक)' –

+0

क्या आप इसका मतलब बता सकते हैं, कृपया? – CesarGon

+0

आपने कहां से कहा कि * वर्तमान दिनांक/समय से जुड़े * gtes? – David

उत्तर

14

अभ्यास में, मैंने पाया कि बिल्ड नंबर उस दिन आधी रात 2.

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

हालांकि से विभाजित के बाद से सेकंड की संख्या है 1 जनवरी 2000 के बाद से संशोधन दिनों की संख्या है, जैसा कि अन्य ने पहले से ही दस्तावेज को इंगित किया है, यह गारंटी नहीं देता है कि यह हमेशा मामला होगा।

+0

धन्यवाद! यही वही है जो मुझे चाहिए था। –

0

विधानसभा संस्करण यहाँ प्रलेखित है: http://msdn.microsoft.com/en-us/library/51ket42z.aspx

नीचे बोली से, मैं होता कहते हैं कि तुम क्या कह रहे हैं संभव नहीं है और आपकी जानकारी गलत है।

विधानसभा संस्करण संख्या प्रत्येक विधानसभा अपने पहचान का हिस्सा के रूप में एक संस्करण संख्या है। जैसे, दो विधानसभाओं कि संस्करण संख्या से भिन्न होते हैं क्रम द्वारा विचार पूरी तरह से अलग विधानसभाओं होने के लिए कर रहे हैं। कस्टम विधानसभा के बारे में जानकारी की विशेषताओं और एक

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

हालांकि, पृष्ठ के तल पर मैं से जुड़ा हुआ है, वहाँ है: यह संस्करण संख्या शारीरिक रूप से निम्न स्वरूप के साथ एक चार भाग स्ट्रिंग के रूप में प्रतिनिधित्व है असेंबली विशेषताओं को सेट करने के लिए लिंक। आपको वहां कुछ उपयोगी मिल सकता है।

इसी का परिणाम एक निर्माण है: - संपादित जोड़ा

मैं लिंक आप मेरी टिप्पणी का जवाब में पोस्ट किया है, और केवल एक चीज मैं देख रहा हूँ पर एक दृष्टि डाली है संख्या एक यादृच्छिक, नामित प्रारंभ दिनांक और संशोधन मध्यरात्रि के बाद सेकंड की संख्या के आधार पर बाद के दिनों की संख्या के लिए निर्धारित किया है।

तथ्य यह एक "यादृच्छिक नामित आरंभ तिथि" मैं कहूँगा कि wha आग्रह कर रहे हैं शायद संभव है अगर आप पता लगा सकते हैं क्या यादृच्छिक नामित आरंभ तिथि है का कहना है कि के आधार पर, लेकिन मुझे शक है यह होगा पता लगाने के प्रयास के लायक हो। सबसे अच्छा pactices

कोडिंग के लिए

बेशर्म प्लग आप बेहतर होगा संशोधन नियंत्रण और एक स्वचालित निर्माण प्रक्रिया का उपयोग कर और उन से लॉग का उपयोग एक asembly के निर्माण की तारीख निर्धारित करने के लिए किया जाना है सेवा की।

2

संस्करण स्ट्रिंग इस प्रारूप है:

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

और आप वर्णित आप संस्करण निर्धारित करते हैं के रूप में की है, 1.0.* रहे हैं:

इसी का परिणाम के लिए एक बिल्ड नंबर सेट है एक यादृच्छिक, नामित आरंभ तिथि के बाद से दिनों की संख्या और संशोधन मध्यरात्रि के बाद सेकंड की संख्या पर आधारित है।

कुंजी यहाँ "यादृच्छिक" है।इसलिए, आप संशोधन के दिन के समय में अनुवाद कर सकते हैं, लेकिन ऐसा लगता है कि आप इसे किसी तारीख को हल नहीं कर पाएंगे। "दैनिक डिफ़ॉल्ट बिल्ड नंबर वेतन वृद्धि डिफ़ॉल्ट संशोधन संख्या यादृच्छिक है।।":

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

+0

दिलचस्प, आपका एमएसडीएन लिंक और मेरा लिंक एक दूसरे के साथ थोड़ा सा संघर्ष करता है। –

+0

क्षमा करें, @ माइकल - मैंने गलती से आपकी पोस्ट संपादित की, फिर मेरी गलती का एहसास हुआ और अपनी पोस्ट से अपने संपादन हटा दिए और उन्हें अपने आप में डाल दिया। वह एक हादसा था। * क्षमा करें * – David

+0

लेकिन यह आपके लिए +1 है क्योंकि यह आपके निष्कर्ष की तरह दिखता है कि मैं इसे कैसे पढ़ता हूं। – David

2

MSDN के अनुसार

यदि आप परावर्तक में AssemblyVersionAttribute के स्रोत को देखते हैं, तो आप देखेंगे कि यह कुछ भी नहीं कर रहा है, बस स्ट्रिंग को स्वीकार कर रहा है। तो जादू स्वयं संकलक के साथ होता है, जहां तक ​​मैं कह सकता हूं कहीं भी दस्तावेज नहीं है। "हर रोज बढ़ी" क्या अस्पष्ट है, किस बिंदु से शुरू हो रही है?

मैं इन संस्करणों का उपयोग किसी भी विश्वसनीयता के साथ करने में सक्षम होने की उम्मीद नहीं करता। स्रोत नियंत्रण प्रणाली या उस तरह की किसी चीज़ में किसी लेबल के अपने संस्करण को बंद करना शायद बेहतर है।

+0

और आपको +1 भी। स्रोत नियंत्रण प्रणाली में लेबलिंग के लिए – David

+0

+1। – Russell

+0

विश्वसनीयता महत्वपूर्ण नहीं है, मुझे बस कुछ चाहिए। –

0

भले ही आप स्वत: जेनरेट किए गए बिल्ड नंबर से दिनांक/समय की गणना कर सकें, मैं इसकी अनुशंसा नहीं करता। बिल्ड नंबर उस उद्देश्य के लिए नहीं था। यह केवल एक ऑटो-जेनरेटेड वैल्यू होने का मतलब था जिसे आप लगातार बढ़ने के लिए निर्भर कर सकते हैं। उपभोग करने वाले आवेदन से कोई और तर्क नहीं माना जाना चाहिए। यदि आप दिनांक संख्या/समय टिकट को शामिल करने के लिए संस्करण संख्या का एक टुकड़ा चाहते हैं, तो आपको उस तर्क को अपनी बिल्ड प्रक्रिया/स्क्रिप्ट में एकीकृत करना चाहिए/अन्यथा आप ऐसा करने का विकल्प चुन सकते हैं। वर्ष | | महीना | दिवस | BuildCounter |

+0

आप कैसे जानते हैं कि मैं इस पर तर्क बना रहा हूं? शायद मैं सिर्फ एक डीएलएल देख रहा हूं और इसे बनाने के लिए सबसे अच्छा अनुमान लगाने की कोशिश कर रहा हूं। –

+0

आप दोनों हो सकते हैं: उदाहरण के लिए 170504 एक बढ़ती संख्या और वाई वाईएमएमडीडी तिथि भी है। आप एक कदम बढ़ाते हैं, लेकिन आपको लगता है कि इसकी आवश्यकता नहीं है। – tenpn

0

मैं अपने विधानसभाओं AssemblyInfo.cs

हम संस्करणों के लिए निम्न स्वरूप का उपयोग पर UpdateVersion बुला पर एक PostBuild स्क्रिप्ट का उपयोग।

जैसे अद्यतन संस्करण खुला स्रोत है, आप इसे सूट करने के लिए संशोधित कर सकते हैं।

मैंने इसे वर्तमान दिनांक और प्रत्येक काउंटर में वृद्धि करने वाले काउंटर का उपयोग करने के लिए संशोधित किया है।

इस तरह से संस्करण संख्या हमेशा बदलती है, और मैं संस्करण संख्या से तारीख प्राप्त कर सकता हूं।

वास्तव में बहुत आसान है।

0

पुरानी पोस्ट लेकिन उम्मीद है कि यह बिल्ड पर संस्करण संख्या अपडेट करने के लिए एक और (आसान) विकल्प प्रदान करेगा। मैंने संस्करण संख्याओं को संशोधित करने के लिए एक MSBUILD RegexTransform चरण का उपयोग किया। यहां एक पोस्ट है जिसे मैं अक्सर वापस ले जाता हूं जब मुझे इस सुविधा को लागू करने की आवश्यकता होती है।

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

मूल रूप से, अपने MSBuild proj फ़ाइल में आप एक अपने AssemblyInfo फ़ाइल पर बदलने पैदा करते हैं। कुछ की तरह:

<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> 

जहां BUILD_NUMBER बाहर से आपूर्ति की जाती है:

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

रोसलिन और .NET कोर में, संकलक स्रोत कोड अब उपलब्ध है।

फ़ाइल roslyn/src/Compilers/Core/Portable/VersionHelper.cs (https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/Portable/VersionHelper.cs - प्रतिबद्ध 4f44984 on 2016-04-19 से) विधि GenerateVersionFromPatternAndCurrentTime में मूल csc से एक ही तिथि तर्क है:

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); 

हालांकि प्रलेखन टिप्पणियां बस कहते हैं कि "समय-आधारित मूल्य" के बिना यह कैसे उत्पन्न होता है इसके बारे में विशिष्ट होना।

लेकिन वास्तव में, अब तक Build अभी भी दिन 2000/01/01 के बाद से है और Revisionआधा आधी रात के बाद से सेकंड की संख्या है।

दिलचस्प है, इस व्यवहार परिभाषित और VersionHelperTests.cs में परीक्षण मामलों में सत्यापित किया गया है: https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs

संबंधित मुद्दे

 संबंधित मुद्दे