2011-02-09 37 views
132

मैं निम्न कोड का उपयोग कर सी # 3.0 में निष्पादन असेंबली संस्करण प्राप्त करने का प्रयास कर रहा हूं:मैं निष्पादन असेंबली संस्करण कैसे प्राप्त कर सकता हूं?

var assemblyFullName = Assembly.GetExecutingAssembly().FullName; 
var version = assemblyFullName .Split(',')[1].Split('=')[1]; 

क्या ऐसा करने का कोई और उचित तरीका है?

उत्तर

231

दो विकल्प ... आवेदन प्रकार की परवाह किए बिना आप हमेशा आह्वान कर सकते हैं:

Assembly.GetExecutingAssembly().GetName().Version 

तो एक Windows Forms आवेदन, आप हमेशा आवेदन के माध्यम से उपयोग कर सकते हैं अगर उत्पाद संस्करण के लिए विशेष रूप देख।

Application.ProductVersion 

असेंबली संदर्भ के लिए GetExecutingAssembly का उपयोग करना हमेशा एक विकल्प नहीं होता है। जैसे, मैं व्यक्तिगत रूप से यह उपयोगी परियोजनाओं में एक स्थिर सहायक वर्ग बनाने के लिए जहाँ मैं अंतर्निहित विधानसभा या विधानसभा संस्करण को संदर्भित करने की आवश्यकता हो सकती है:

// A sample assembly reference class that would exist in the `Core` project. 
public static class CoreAssembly 
{ 
    public static readonly Assembly Reference = typeof(CoreAssembly).Assembly; 
    public static readonly Version Version = Reference.GetName().Version; 
} 

तो मैं सफाई से मेरी कोड में CoreAssembly.Version संदर्भित कर सकते हैं के रूप में की आवश्यकता है।

+5

यह ClickOnce के साथ तैनात किया है, तो आप जांच करने की आवश्यकता 'System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion' –

+0

क्या होगा दिलचस्प रहें: आपको वास्तविक संस्करण निर्दिष्ट करने की आवश्यकता कहां है? मैंने अपने असेंबली इन्फॉर्मेशन में असेंबली वर्जन और असेंबलीफाइलवर्सन निर्दिष्ट किया है और उपर्युक्त कॉल से प्राप्त सभी मुझे यह है: 0.0.0.0 निर्दिष्ट 1.0.0 – AgentKnopf

+0

@Zainodis यदि आप @ जस्टिन द्वारा उल्लिखित 'क्लिकऑन' संस्करण का जिक्र कर रहे हैं, तो यह है प्रोजेक्ट गुणों के भीतर 'प्रकाशित करें' टैब पर निर्दिष्ट (यानी, असेंबली वर्जन या असेंबलीफाइलवर्सन से संबंधित नहीं)। –

5

यह करना चाहिए:

Assembly assem = Assembly.GetExecutingAssembly(); 
AssemblyName aName = assem.GetName(); 
return aName.Version.ToString(); 
+4

यह 3 लाइनें 1 हो सकती हैं: असेंबली रिटर्न। गेटएक्सएक्सिंग एस्प्लिब्स()। GetName()। संस्करण.ToString(); ............. – Alexandre

17
using System.Reflection; 
{ 
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString(); 
} 

टिप्पणियां MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx से:

GetEntryAssembly विधि null लौट सकते हैं जब एक कामयाब विधानसभा एक अप्रबंधित आवेदन से लोड किया गया है। उदाहरण के लिए, यदि एक अप्रबंधित एप्लिकेशन सी # में लिखे गए COM घटक का उदाहरण बनाता है, तो C# घटक से GetEntryAssembly विधि पर कॉल null देता है, क्योंकि प्रक्रिया के लिए प्रविष्टि बिंदु एक प्रबंधित असेंबली के बजाय अप्रबंधित कोड था।

+2

+1। 'GetEntryAssembly' (बनाम' GetCallingAssembly' या 'GetExecutingAssembly') एकमात्र चीज प्रतीत होती है जो संदर्भ पुस्तकालय के भीतर से कॉल की जाती है। – drzaus

29

MSDN में, Assembly.GetExecutingAssembly Method,, विधि के बारे में "getexecutingassembly" टिप्पणी है कि प्रदर्शन के कारणों के लिए, आप केवल इस विधि फोन करना चाहिए जब आप डिजाइन समय में नहीं पता है कि विधानसभा वर्तमान में क्रियान्वित किया गया है।

असेंबली में पाए गए एक प्रकार की संपत्ति Type.Assembly संपत्ति का उपयोग करने के लिए एक असेंबली ऑब्जेक्ट को पुनर्प्राप्त करने का अनुशंसित तरीका है।

निम्न उदाहरण दिखाता है:

using System; 
using System.Reflection; 

public class Example 
{ 
    public static void Main() 
    { 
     Console.WriteLine("The version of the currently executing assembly is: {0}", 
          typeof(Example).Assembly.GetName().Version); 
    } 
} 

/* This example produces output similar to the following: 
    The version of the currently executing assembly is: 1.1.0.0 

बेशक यह बहुत ही सहायक वर्ग "सार्वजनिक स्थैतिक कक्षा CoreAssembly" के साथ जवाब देने के लिए समान है, लेकिन, अगर आप विधानसभा को क्रियान्वित करने के लिए कम से कम एक प्रकार पता है, यह नहीं एक सहायक वर्ग बनाने के लिए अनिवार्य नहीं है, और यह आपके समय बचाता है।

+0

GetExecutingAssembly का उपयोग करके अन्य उत्तरों की तुलना में काफी बेहतर –

1

अंत में मैं netstandard1.6 ऐप के लिए typeof(MyClass).GetTypeInfo().Assembly.GetName().Version पर बस गया। अन्य सभी प्रस्तावित उत्तरों ने आंशिक समाधान प्रस्तुत किया। यह एकमात्र चीज है जिसने मुझे बिल्कुल वही मिला जो मुझे चाहिए था।

स्थानों के संयोजन से Sourced:

https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx

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

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