2011-06-27 15 views
47

मैं सी # में प्रोग्रामेटिक रूप से वर्तमान उत्पाद संस्करण कैसे प्राप्त कर सकता हूं?सी # में वर्तमान उत्पाद संस्करण कैसे प्राप्त करें?

मेरे कोड:

VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

मैं VersionNumber = 1.0.0.0 हो रही है, लेकिन वर्तमान संस्करण 1.0.0.12 है।

+1

चेक क्या यह 'System.Reflection.Assembly.GetExecutingAssembly() में लौटा रहा है। GetName()' –

+0

इसके अलावा, आप विधानसभा संस्करण के लिए या देख रहे हैं आप वास्तव में ClickOnce अनुप्रयोग संस्करण के लिए देख रहे हैं ? –

+1

"वर्तमान संस्करण 1.0.0.12 है" - कहाँ सेट करें? एक्सप्लोरर (टाइल्स व्यू, या गुण, संस्करण) में फ़ाइल संस्करण के लिए आप क्या देखते हैं – Rup

उत्तर

26

मुझे अपने प्रश्न का उत्तर मिला है, बस सिस्टम का संदर्भ दें। तैनाती। आवेदन और हालांकि यह विजुअल स्टूडियो के विकास में काम नहीं करेगा, लेकिन एप्लिकेशन को तैनात करने के बाद यह काम करेगा।

//using System.Deployment.Application; 
    //using System.Reflection; 
    public string CurrentVersion 
    { 
     get 
     { 
      return ApplicationDeployment.IsNetworkDeployed 
        ? ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString() 
        : Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
     } 
    }  
3

इस प्रयास करें:

var thisApp = Assembly.GetExecutingAssembly(); 
AssemblyName name = new AssemblyName(thisApp.FullName); 
VersionNumber = "v. " + name.Version; 

इसके अलावा, AssemblyName.Version संपत्ति पर this MSDN आलेख देखें।

+0

अभी भी 1.0.0.0 –

+0

है कि असेंबली या असेंबलीफाइलवर्जन? –

+0

वह कोड जिसे आपने उत्तर दिया था। असल में बात यह है कि मुझे उस एप्लिकेशन के वर्तमान संस्करण की आवश्यकता है जिसे हम बना रहे हैं। तो मैं इसे कैसे प्राप्त कर सकता हूं। वही है जो हमारे पास समाधान गुणों में है। –

57

तीन संस्करण हैं: असेंबली, फ़ाइल और उत्पाद। उत्पाद संस्करण प्राप्त करने के लिए:

using System.Reflection; 
using System.Diagnostics; 
Assembly assembly = Assembly.GetExecutingAssembly(); 
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
string version = fileVersionInfo.ProductVersion; 
+0

काफी हास्यास्पद है कि प्रोजेक्ट गुणों में किनारे किनारे दो संस्करण सेटिंग्स हैं जो आंतरिक रूप से एक ही कक्षा में नहीं हैं। बिल्ली, यहां तक ​​कि दो वर्गों में गुण समान नहीं हैं; अंतिम भाग को असेंबली संस्करण में "संशोधन" के रूप में जाना जाता है, लेकिन फ़ाइल संस्करण में "निजी" के रूप में जाना जाता है। – Nyerguds

5

उत्पाद संस्करण (जो AssemblyInformationalVersionAttribute का उपयोग कर निर्दिष्ट किया जाता है) प्राप्त करने के लिए एक और दृष्टिकोण

private static string AssemblyProductVersion 
{ 
    get 
    { 
     object[] attributes = Assembly.GetExecutingAssembly() 
      .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); 
     return attributes.Length == 0 ? 
      "" : 
      ((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion; 
    } 
} 
+1

यह उन परिस्थितियों में बेहतर है जहां फ़ाइल सिस्टम तक पहुंच उपलब्ध नहीं है (उदा। एसक्लक्लर)। – rrreee

2

सी # में आप प्रतिबिंब उपयोग करने की आवश्यकता और निदान है

Assembly assembly = Assembly.GetExecutingAssembly(); 
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
string version = fileVersionInfo.ProductVersion; 
+1

यदि आपके पास नेटवर्क तैनात संस्करण है या प्रोजेक्ट स्टार्ट अप के रूप में अन्य प्रोजेक्ट का उपयोग कर यह काम नहीं करता है। –

3

ये सभी उत्तर .GetExecutingAssembly() के साथ असेंबली के लिए पूछते हैं।
यदि आपके पास यह कोड एक डीएलएल में है, तो यह डीएलएल संस्करण संख्या वापस कर देगा।

स्वैप जो आपके कोड में स्थान प्राप्त करने के लिए GetCallingAssembly() पर कॉल करें।

/// <summary> 
/// Returns version like 2.1.15 
/// </summary> 
public static String ProductVersion 
{ 
    get 
    { 
     return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location).ProductVersion).ToString(); 
    } 
} 
10
System.Reflection.Assembly.GetEntryAssembly().GetName().Version 
+0

एक टिप्पणी होना चाहिए। –

+0

GetEntryAssembly चल रहे एप्लिकेशन को प्राप्त करने का मुख्य बिंदु है, यहां तक ​​कि कोड एक डीएलएल असेंबली में है –

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