2013-02-14 32 views
7

AssemblyInfo.cs फ़ाइल AssemblyVersion विशेषता है, लेकिन जब मैं चलाने के निम्नलिखित:प्रतिबिंब का उपयोग करके मैं असेंबली वर्जन विशेषता क्यों लोड नहीं कर सकता?

Attribute[] y = Assembly.GetExecutingAssembly().GetCustomAttributes(); 

मैं:

System.Runtime.InteropServices.ComVisibleAttribute 
System.Runtime.CompilerServices.RuntimeCompatibilityAttribute 
System.Runtime.CompilerServices.CompilationRelaxationsAttribute 
System.Runtime.InteropServices.GuidAttribute 

System.Diagnostics.DebuggableAttribute 

System.Reflection.AssemblyTrademarkAttribute 
System.Reflection.AssemblyCopyrightAttribute 
System.Reflection.AssemblyCompanyAttribute 
System.Reflection.AssemblyConfigurationAttribute 
System.Reflection.AssemblyFileVersionAttribute 
System.Reflection.AssemblyProductAttribute 
System.Reflection.AssemblyDescriptionAttribute 

और अभी तक मैं जाँच की है अनगिनत बार है कि इस विशेषता में मौजूद है मेरी कोड:

[assembly: AssemblyVersion("5.5.5.5")] 

... और अगर मैं इसे तक पहुँचने का प्रयास सीधे मैं एक अपवाद प्राप्त करें:

Attribute x = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyVersionAttribute)); //exception 

मुझे लगता है कि मैं उस विशेषता का उपयोग करने में सक्षम नहीं होगा, लेकिन कैसे आइए इसे पढ़ नहीं रहा है?

+0

आप क्या करने की कोशिश कर रहे हैं? 'असेंबली' में पहले से ही 'संस्करण' संपत्ति है। – ashes999

+0

क्या आप निश्चित हैं? मैं न तो –

+1

के साथ एक स्थिर और न ही इंस्टेंस प्रॉपर्टी देखता हूं आपको 'GetName()' example 'var y = assembly.GetExecutingAssembly()। GetName() संस्करण; ' –

उत्तर

4

मैं फिर कहता हूँ जाएगा हंस Passant की टिप्पणी:

[AssemblyVersion] .NET में एक बहुत बड़ी बात है। कंपाइलर विशेषता विशेष रूप से व्यवहार करता है, जब यह असेंबली के मेटाडेटा उत्पन्न करता है तो इसका उपयोग करता है। और वास्तव में विशेषता को उत्सर्जित नहीं करता है, जो इसे दो बार कर रहा होगा। जैसा कि दिखाया गया है, के बजाय Assembly नाम बदलें। संस्करण।

8

तुम सिर्फ विधानसभा संस्करण प्राप्त करने की कोशिश कर रहे हैं, यह बहुत सीधे आगे है:

Console.WriteLine("The version of the currently executing assembly is: {0}", Assembly.GetExecutingAssembly().GetName().Version); 

संपत्ति System.Version का एक प्रकार है, जो Major, Minor, Build, और Revision गुण है है।

उदा। संस्करण 1.2.3.4 की एक सभा है:

  • Major = 1
  • Minor = 2
  • Build = 3
  • Revision = 4
0

(सिर्फ एक होने का जायके के दौर के लिए संस्करण ...)

आप एक मनमाना विधानसभा पर फ़ाइल संस्करण जानकारी (यानी, नहीं एक लोड/चल रहा है) प्राप्त करने के लिए कोशिश कर रहे हैं, तो आप FileVersionInfo उपयोग कर सकते हैं - हालांकि, ध्यान दें कि यह एक ही AssemblyVersion मेटाडाटा में निर्दिष्ट नहीं किया जा सकता:

var filePath = @"c:\path-to-assembly-file"; 
FileVersionInfo info = FileVersionInfo.GetVersionInfo(filePath); 

// the following two statements are roughly equivalent 
Console.WriteLine(info.FileVersion); 
Console.WriteLine(string.Format("{0}.{1}.{2}.{3}", 
     info.FileMajorPart, 
     info.FileMinorPart, 
     info.FileBuildPart, 
     info.FilePrivatePart)); 
+0

वह [असेंबलीफाइलवर्सन] है। –

+0

@ हंसपसंत आह, अच्छा बिंदु; वहाँ * फ़ाइल संस्करण और प्रतिबिंब के माध्यम से प्राप्त "असेंबली" संस्करण के बीच एक संभावित भेद है ... हालांकि कोई तर्क दे सकता है कि वे * होना चाहिए ... :) – JerKimball

+2

@JerKimball मैं उनके बारे में असहमत हूं वही। अगर आपके पास एक हस्ताक्षरित असेंबली है और चीजों को काम करने की आवश्यकता है, तो फाइलवर्जन किसी असेंबली के लिए बाध्यकारी मतभेद नहीं पैदा करता है, आप अपने फाइलवर्जन को बढ़ा सकते हैं और अभी भी पुरानी परियोजनाओं को "निश्चित" असेंबली (उसी असेंबली संस्करण के साथ) –

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

  • कोई संबंधित समस्या नहीं^_^