2011-09-08 20 views
5

मान लीजिए कि मैं असेंबली फ़ाइल का केवल एक पथ दिया गया है, मैं असेंबली का पूरा नाम प्रदर्शित करना चाहता हूं।असेंबली का पूरा नाम

मुझे पता है कि मैं एक कमांड लाइन प्रोग्राम या पावरहेल स्क्रिप्ट आसानी से पर्याप्त लिख सकता हूं, लेकिन क्या रनटाइम में एक कमांड शामिल है जिसका मैं उपयोग कर सकता हूं? (मैंने देखा है GACUtil विधानसभाओं कि गाक में हैं के लिए यह करते हैं, लेकिन विधानसभाओं कि पंजीकृत नहीं हैं के बारे में?)

उत्तर

5

मुख्य समस्याग्रस्त एक पूर्ण नाम के हिस्से के आम तौर पर सार्वजनिक कुंजी टोकन है। हालांकि

sn -T path\to\your.dll 

व्यक्तिगत रूप से, मैं यह आसान सिर्फ परावर्तक में DLL लोड करने लगता है,: आप दृश्य स्टूडियो कमांड प्रॉम्प्ट विंडो में इस डालकर उसे प्राप्त कर सकते हैं। यह नीचे पैनल में पूरा नाम दिखाता है।

+4

+1 को घुमाएं। –

+0

इसे परावर्तक में लोड करने के बजाय, आप केवल एक कंसोल ऐप लिख सकते हैं: डी – Jamiec

+1

@ जैमिक सुनिश्चित करें, लेकिन मेरे पास परावर्तक आसानी से उपलब्ध है। –

4

आप AssemblyName के माध्यम से प्राप्त कर सकते हैं:

var name = AssemblyName.GetAssemblyName(path); 
var fullname = name.FullName; 

यह वास्तव में विधानसभा लोड हो रहा टाल आपकी प्रक्रिया

+0

क्षमा करें, यह नहीं है कि मैं क्या देख रहा हूँ। मुझे पता है कि कोड में इसे कैसे किया जाए। मैं एक कमांड लाइन विकल्प के बाद क्या था, क्योंकि मुझे एक समर्थन व्यक्ति को यह कैसे करना है, यह सिखााना है। मैं उम्मीद कर रहा था कि एक अंतर्निहित सीएमडी था जो मुझे वह चाहिए जो मैं चाहता था - अपना खुद का रोलिंग समाप्त हो गया। हालांकि - मैं असेंबली का उपयोग कर रहा था। ReflectionLoadFrom()। मैं असेंबलीनाम के लिए विधानसभा नाम का उपयोग करने के लिए स्विच करूंगा। GETAssembly नाम +1 किसी भी तरह से विधानसभा नाम टिप के लिए। – JMarsch

0
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name 
+0

क्षमा करें, यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मुझे पता है कि कोड में इसे कैसे किया जाए। मैं एक कमांड लाइन विकल्प के बाद क्या था, क्योंकि मुझे एक समर्थन व्यक्ति को यह कैसे करना है, यह सिखााना है। मैं उम्मीद कर रहा था कि एक अंतर्निर्मित cmd था जो मुझे वांछित करेगा जो मुझे चाहिए - वास्तव में यह जानने के लिए कि क्या यहां पूछा गया है, मेरे – JMarsch

17

मुझे लगता है कि आप System.Reflection.AssemblyName.GetAssemblyName लिए देख रहे हैं:

AssemblyName name = AssemblyName.GetAssemblyName(@"C:\path\assembly.dll"); 
Console.WriteLine(name.FullName); 

समाधान Assembly.Load का उपयोग कर के विपरीत, इस अपने AppDomain में विधानसभा लोड नहीं होगा। यह आपको असेंबली में किसी भी संदर्भ को हल किए बिना असेंबली के लिए असेंबली नाम प्राप्त करने की अनुमति देगा, और विधानसभा में किसी भी कोड (उदा। मॉड्यूल स्थिर रचनाकार) निष्पादित किए बिना। यह आपको एक असेंबली का असेंबली नाम भी देगा जो .NET Framework के संस्करण को लक्षित करता है जो उस संस्करण से अलग है जिस पर आपका एप्लिकेशन चल रहा है।

+0

क्षमा करें, यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मुझे पता है कि कोड में इसे कैसे किया जाए।मैं एक कमांड लाइन विकल्प के बाद क्या था, क्योंकि मुझे एक समर्थन व्यक्ति को यह कैसे करना है, यह सिखााना है। मैं उम्मीद कर रहा था कि एक अंतर्निहित सीएमडी था जो मुझे वह चाहिए जो मैं चाहता था - अपना खुद का रोलिंग समाप्त हो गया। – JMarsch

+1

जेमारस्च की तलाश में नहीं हो सकता था, लेकिन वही था जो मैं खुद चाहता था! धन्यवाद –

+1

'असेंबली के साथ संयोजन में बहुत उपयोगी। रिफ्लेक्शनऑनलीलोड (...) ' – marsze

1

एक और जवाब के लिए, आप PowerShell के साथ ऐसा कर सकते हैं:

[System.Reflection.AssemblyName]::GetAssemblyName($PathToAssembly).FullName 

यह सिर्फ sn.exe पाने के लिए स्थापित दृश्य स्टूडियो के लिए की जरूरत नहीं का लाभ दिया है, और इसके लिए पूरा मजबूत नाम देता है कि सार्वजनिक कुंजी टोकन की बजाय असेंबली।

यह बहुत आसान रैप करने के लिए है कि एक cmdlet लिपि में है:

[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$true,Position=0)] 
    $Path 
) 

Process { 
    $FullPath = [System.IO.Path]::GetFullPath($Path); 
    return [System.Reflection.AssemblyName]::GetAssemblyName($FullPath).FullName; 
} 
संबंधित मुद्दे