2008-11-27 8 views
23

के तल पर/जानकारी मैं एक asp.net वेब अनुप्रयोग जो अपने नेटवर्क के अंदर अलग ग्राहक सर्वर पर तैनात संस्करणों की एक संख्या है की है। हमारे पास एक अभ्यास है जब ग्राहकों को समस्याएं होती हैं तो ग्राहक स्क्रीनशॉट ईमेल करते हैं।ASP.NET - शो आवेदन निर्माण तिथि स्क्रीन

वर्ष asp.net 1.1 दिनों में, हम निर्माण DLL का ब्यौरा हड़पने सकता है, प्रतिबिंब का उपयोग कर, और निर्माण की तारीख और एक सूक्ष्म स्थान में स्क्रीन पर नंबर की जानकारी ही दिखा।

.NET 2.0 और उच्चतर, निर्माण मॉडल के साथ बदल गया है, और इस तंत्र काम नहीं करता। मैंने वहां विभिन्न बिल्ड सिस्टम के बारे में सुना है, लेकिन 3.5 फ्रेमवर्क पर, मैं वास्तव में फ्रेमवर्क 1.1 पर यह कार्यक्षमता करने के लिए सबसे आसान तरीका ढूंढ रहा हूं।

  1. हर बार निर्माण किया जाता है, निर्माण तिथि/समय अपडेट करते हैं और किसी भी तरह अद्यतन बिल्ड नंबर
  2. निर्माण टाइमस्टैम्प और संख्या को देखने के लिए, स्क्रीन पर प्रदर्शित करने
  3. में सरल किया जा सक्षम हो के रूप में संभव लागू करने के लिए
+0

http://stackoverflow.com/questions/1168279/asp-net-version-build-number/1168329#1168329 – Saber

उत्तर

17

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

Assembly assembly = Assembly.GetExecutingAssembly(); 
string version = assembly.GetName().Version.ToString(); 
string buildDate = ((AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
    assembly, typeof(AssemblyDescriptionAttribute))).Description; 

बिल्ड प्रक्रिया विधानसभाInfo.cs फ़ाइल उत्पन्न करने के लिए asminfo nant कार्य का उपयोग करती है जिसमें यह जानकारी होती है।

<asminfo output="Properties\AssemblyInfo.cs" language="CSharp"> 
     <imports> 
      <import namespace="System" /> 
      <import namespace="System.Reflection" /> 
      <import namespace="System.Runtime.CompilerServices" /> 
      <import namespace="System.Runtime.InteropServices" /> 
     </imports> 
     <attributes> 
      <attribute type="AssemblyVersionAttribute" value="${assembly.version}" /> 
      <attribute type="AssemblyInformationalVersionAttribute" value="${assembly.version}" /> 
      <attribute type="AssemblyDescriptionAttribute" value="${datetime::now()}" /> 
      ... 
     </attributes> 
    </asminfo> 
+0

यह वही प्रकार का समाधान है जिसे मैं ढूंढ रहा था। अच्छा रूप। – pearcewg

+1

मेरे पास कुछ कोड बहुत समान था, मैंने इसे कस्टम नियंत्रण में चकित कर दिया ताकि आप इसे खींच सकें और इसे छोड़ सकें :) –

7

आप प्रतिबिंब के माध्यम से विधानसभा बिल्ड तारीख प्राप्त कर सकते हैं की जाँच इस उदाहरण:

+1

"निर्धारण बनाने की दिनांक मुश्किल तरीके से" मेरे लिए काम करता है। – zsong

+0

कोडिंग डरावनी समाधान के साथ अच्छा लगता है - मुझे निश्चित रूप से डिफ़ॉल्ट समाधान पसंद नहीं है जो major.minor के बाद असेंबली संस्करण पर निर्भर करता है। *।0 पैटर्न, क्योंकि मैं हमेशा major.minor.0.0 और असेंबली फ़ाइल संस्करण को assembly.minor.build.revision में असेंबली संस्करण सेट करता हूं, ताकि मैं आसानी से असेंबली हॉटफिक्स कर सकूं। लिंकर का अपना टाइमस्टैम्प पढ़ना बहुत चालाक है। पूरे दौर में +1! –

16

मैं .NET 2.0 और 3.5 का उपयोग कर रहा हूं और यह बिल्ड नंबर और बिल्ड तिथि दोनों सेट करने में सक्षम है। मदद पैनल का कहना है कि अगर अभी तक नेट यह सेट करने देती है, यह संशोधन के लिए एक यादृच्छिक संख्या का उपयोग करेगा कि है, कि सच नहीं है, यह वास्तव में दिनांक/समय की जानकारी आसानी से निकाला जा सकता है कि, जो ऑनलाइन डॉक्स द्वारा की पुष्टि की है डालता है : http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx

इस ब्लॉग देखें: http://dotnetfreak.co.uk/blog/archive/2004/07/08/determining-the-build-date-of-an-assembly.aspx?CommentPosted=true#commentmessage

मैं अपने आप को बिल्ड संस्करण स्थापित करना चाहते हैं, लेकिन अभी भी इतना स्वत: दिनांक/समय टिकट चाहते हैं मैं AssemblyVersion (के लिए कुछ इस तरह का उपयोग करें "1.0 *।")

यहाँ निर्माण तिथि/समय निकालने के लिए एक नमूना समारोह है

private System.DateTime BuildDate() 
{ 

//This ONLY works if the assembly was built using VS.NET and the assembly version attribute is set to something like the below. The asterisk (*) is the important part, as if present, VS.NET generates both the build and revision numbers automatically. 
//<Assembly: AssemblyVersion("1.0.*")> 
//Note for app the version is set by opening the 'My Project' file and clicking on the 'assembly information' button. 
//An alternative method is to simply read the last time the file was written, using something similar to: 
//Return System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly.Location) 

//Build dates start from 01/01/2000 

System.DateTime result = DateTime.Parse("1/1/2000"); 

//Retrieve the version information from the assembly from which this code is being executed 

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

//Add the number of days (build) 

result = result.AddDays(version.Build); 

//Add the number of seconds since midnight (revision) multiplied by 2 

result = result.AddSeconds(version.Revision * 2); 

//If we're currently in daylight saving time add an extra hour 

if (TimeZone.IsDaylightSavingTime(System.DateTime.Now, TimeZone.CurrentTimeZone.GetDaylightChanges(System.DateTime.Now.Year))) 
{ 
    result = result.AddHours(1); 
} 

return result; 

} 
+0

यह बहुत उपयोगी है और विधानसभा में एक से अधिक त्वरित परिवर्तन की आवश्यकता नहीं है .cs! :-) – Filip

33

मैं बस क्रियान्वित विधानसभा की तारीख का उपयोग करने के लिए चुना है। जिस तरह से मैं फाइलें प्रकाशित करता हूं, यह ठीक काम करता है।

lblVersion.Text = String.Format("Version: {0}<br>Dated: {1}", 
    System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(), 
    System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToShortDateString()); 
+0

मैं एक वृद्धिशील बिल्ड नंबर का उपयोग करता हूं, इसलिए मैं उस 'संख्याओं की संख्या' का उपयोग नहीं कर सकता-बैंगनी-जादू जो कुछ पोस्ट संस्करण संख्याओं के साथ उपयोग करते हैं। –

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