2013-08-28 4 views
10

मैं एक PowerShell v3 मॉड्यूल पर काम कर रहा हूं जिसे कुछ बाहरी .NET असेंबली में निहित प्रकारों के साथ काम करने की आवश्यकता है।PowerShell v3 मॉड्यूल में बाहरी .NET असेंबली का विश्वसनीय रूप से संदर्भ कैसे लें?

मैं इस मॉड्यूल को तैनाती की आसानी के लिए उचित रूप से आत्मनिर्भर होना चाहता हूं और मैं जीएसी में लोड होने वाली इन असेंबली पर भरोसा नहीं करना चाहता हूं। आदर्श रूप से, मैं मॉड्यूल फ़ोल्डर में आवश्यक असेंबली डीएलएल रखना चाहता हूं और फिर मॉड्यूल लोड होने पर इन असेंबली को स्वचालित रूप से लोड करने के लिए PowerShell पर निर्भर करता हूं।

मुझे पता है कि मैं जानवर बल के लिए ऐड-प्रकार कमांड इस्तेमाल कर सकते हैं तो जैसे विधानसभाओं लोड:

Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=sometoken" 

लेकिन मैं वरना प्रकट एक मॉड्यूल में आवश्यक विधानसभाओं संपत्ति के बारे में पढ़ा है और मुझे लगता है कि उम्मीद कर रहा हूँ

# Assemblies that must be loaded prior to importing this module 
# RequiredAssemblies = @() 

मॉड्यूल के भीतर बाहरी विधानसभाओं संदर्भ के लिए सबसे विश्वसनीय तरीका क्या है: इस दृष्टिकोण प्रतीत होता है कमजोर ऐड-प्रकार कोड को समाप्त कर सकता? मॉड्यूल लोड होने पर मैनिफेस्ट में निर्भरता को स्पष्ट रूप से असेंबली लोड करना होगा? यदि मैंने आवश्यक असेंबली सूचीबद्ध करने के लिए मॉड्यूल मेनिफेस्ट का लाभ उठाया है तो क्या मुझे अभी भी कोड लिखना होगा जो असेंबली लोड करता है?

मैं वास्तव में एक सरल "काम करने के लिए इसे" समाधान की तलाश नहीं कर रहा हूं क्योंकि मुझे पहले से ही एड-टाइप दृष्टिकोण का उपयोग करने के लिए यह मिल गया है ... मैं करने के सबसे विश्वसनीय तरीके के लिए मार्गदर्शन और संशोधन की तलाश में हूं इस।

उत्तर

10

अपने -RequiredAssemblies पैरामीटर के लिए New-ModuleManifest प्रलेखन इससे सहमत हैं:

निर्दिष्ट करता विधानसभा (.dll) फ़ाइलें कि मॉड्यूल की आवश्यकता है। असेंबली फ़ाइल नाम दर्ज करें। Windows PowerShell प्रकारों या प्रारूपों को अद्यतन करने, नेस्टेड मॉड्यूल आयात करने, या रूट मॉड्यूल कुंजी के मान में निर्दिष्ट मॉड्यूल फ़ाइल आयात करने से पहले निर्दिष्ट असेंबली लोड करता है।

इस पैरामीटर का उपयोग सभी विधानसभाओं कि मॉड्यूल की आवश्यकता है, विधानसभाओं है कि किसी भी स्वरूपण को अपडेट करने या कि FormatsToProcess या TypesToProcess कुंजी

में सूचीबद्ध हैं फ़ाइलें टाइप करने के लिए लोड किया जाना चाहिए सहित सूची और मैं कुछ भी नहीं मिल सकता है अलग (उदाहरण के लिए MSDN)।

+0

क्या आप जानते हैं कि इस संपत्ति में असेंबली को विश्वसनीय रूप से कैसे सूचीबद्ध किया जाए? यदि मैंने पूरी तरह से योग्य नामों का उपयोग किया और मॉड्यूल के फ़ोल्डर में असेंबली डीएल रखा है तो क्या पर्याप्त है या मुझे किसी प्रकार का पथ प्रदान करने की आवश्यकता होगी? असेंबली लोडर इन असेंबली के लिए कहां देखता है? – syneptody

+0

@ सिंप्टोडी लोडिंग नियमों को [एमएसडीएन] पर दस्तावेज किया गया है (http://msdn.microsoft.com/en-us/library/yx7xezcf%28v=vs.100%29.aspx): मुझे नहीं लगता कि पीएसएच कुछ भी करता है मॉड्यूल की निर्देशिका को उस खोज पथ में जोड़ने के अलावा, यहां बहुत खास है। शायद एक उदाहरण के बाद (जैसे [पीएससीएक्स] (http://pscx.codeplex.com/))? – Richard

+0

@syneptody मेरे उपयोग से मेरे पास psd1 फ़ाइल में असेंबली का नाम है, लिपि की एक ही निर्देशिका में असेंबली है और यह बिना किसी समस्या के काम करता है। उदाहरण के लिए 'RequiredAssemblies = @ (' IHE.CDA.Generation.Trifolia ') ' – Tedford

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