2011-10-14 14 views

उत्तर

53
using System.Reflection.Assembly 
using System.Diagnostics.FileVersionInfo 

// ... 

public string GetInformationalVersion(Assembly assembly) { 
    return FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion; 
} 
+0

देखें http://stackoverflow.com/a/19008850/116895 – lance

+7

ध्यान दें कि यह कोड काम नहीं करता है अगर असेंबली फ़ाइल या यूएनसी से लोड नहीं किया गया है। यह मामला हो सकता है यदि असेंबली किसी अन्य असेंबली में एम्बेड की जाती है (आमतौर पर जब असेंबली को रोकती है) या किसी अन्य कारण के लिए 'असेंबली.लोड (बाइट [])' – larsmoa

+2

का उपयोग करके लोड किया गया है, तो अगर आप 'mkbundle' मोनो – Cocowalla

0
+2

संस्करण 'AssemblyVersionAttribute', नहीं' AssemblyInformationalVersionAttribute' द्वारा परिभाषित हो जाता है यही कारण है कि। – vcsjones

+0

क्षमा करें, मैंने इसे ठीक किया है। – mrK

34
var attr = Assembly 
    .GetEntryAssembly() 
    .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false) 
    as AssemblyInformationalVersionAttribute[]; 

यह AssemblyInformationalVersionAttribute की एक सरणी है पर एक नजर डालें। खोजे गए प्रकार की कोई विशेषता नहीं है, भले ही यह कभी भी शून्य न हो।

var attr2 = Attribute 
    .GetCustomAttribute(
     Assembly.GetEntryAssembly(), 
     typeof(AssemblyInformationalVersionAttribute)) 
    as AssemblyInformationalVersionAttribute; 

विशेषता मौजूद नहीं है तो यह शून्य हो सकता है।

var attr3 = Attribute 
    .GetCustomAttributes(
     Assembly.GetEntryAssembly(), 
     typeof(AssemblyInformationalVersionAttribute)) 
    as AssemblyInformationalVersionAttribute[]; 

पहले जैसा ही है।

+1

+1; लेकिन आप 'GetCustomAttributes' के बजाय' GetCustomAttribute' का उपयोग कर सकते हैं यदि आप जानते हैं कि केवल एक विशेषता होगी। – vcsjones

+3

केवल 'Attribute' के स्थिर पद्धति का उपयोग करके,' Assembly' – xanatos

+1

के कहने विधि नहीं का उपयोग कर कुछ स्थितियों में से @vcsjones, 'Assembly.GetEntryAssembly()' 'Assembly.GetExecutingAssembly()' या 'विधानसभा द्वारा प्रतिस्थापित किया जाना चाहिए। GetCallingAssembly() '। आम तौर पर यह आवश्यक है यदि असेंबली एक प्लगइन है - इस मामले में 'GetEntryAssembly()' होस्ट एप्लिकेशन असेंबली वापस कर देगा। – larsmoa

7
AssemblyInformationalVersionAttribute attribute = 
    (AssemblyInformationalVersionAttribute)Assembly.GetExecutingAssembly() 
    .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false).FirstOrDefault(); 

if (attribute != null) 
    Console.WriteLine(attribute.InformationalVersion); 
+0

+1 क्योंकि यह सिल्वरलाइट या एक्सबॉक्स लेकव्यू के साथ भी काम करता है! – ahilsend

10

यहां तक ​​कि अगर सवाल थोड़ा पुराना है:

Application.ProductVersion 
+4

के लिए आपका आवेदन डीपीएफ में मुझे मुश्किल समय मिला, यह विनफॉर्म एप्लिकेशन क्लास है। :-) – Wouter

3

लांस के जवाब की मदद के लिए:

मैं एक अलग समाधान है कि मेरे लिए काम करता प्रस्ताव आप को Application.ResourceAssembly.Location उपयोग कर सकते हैं अपनी असेंबली के फ़ाइल पथ का पता लगाएं। इसके साथ ही यह सिर्फ एक पंक्ति

System.Diagnostics.FileVersionInfo.GetVersionInfo(Application.ResourceAssembly.Location).ProductVersion 
8

में AssemblyInformationalVersion स्ट्रिंग प्राप्त करने के लिए अपने आवेदन में एक ज्ञात प्रकार का उपयोग करते हुए आप बस यह कर सकते हैं संभव है:

using System.Reflection; 

public static readonly string ProductVersion = typeof(MyKnownType).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion; 

बेशक किसी भी प्रक्रिया आप को पाने के लिए उपयोग करें असेंबली आपकी विशेषता लागू है अच्छा है। ध्यान दें कि यह System.Diagnostics या WinForm की Application ऑब्जेक्ट पर भरोसा नहीं करता है।

0

की @ Aerthal के जवाब बंद बिल्डिंग, आप एक एक लाइनर एक MVC उस्तरा दृश्य से AssemblyInformationalVersionAttribute प्राप्त करना चाहते हैं:

@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion 
संबंधित मुद्दे