2008-08-20 13 views
22

क्या किसी ने भी काम किया है कि app.config फ़ाइलों का उपयोग करने के लिए PowerShell कैसे प्राप्त करें? मेरे पास कुछ .NET DLL है, मैं अपनी स्क्रिप्ट में से किसी एक में उपयोग करना चाहता हूं लेकिन वे उम्मीद करते हैं कि app.config/web.config में उनके स्वयं के कॉन्फ़िगरेशन अनुभाग मौजूद होंगे।पावरशेल ऐप। कॉनफिग

उत्तर

32

पार संदर्भित इस सूत्र है, जो मुझे एक ही सवाल के साथ मदद की साथ: Subsonic Access To App.Config Connection Strings From Referenced DLL in Powershell Script

मैं अपने स्क्रिप्ट के लिए निम्न कहा, DLL, जहां $ configpath का स्थान है config सेटिंग की आवश्यकता है लागू करने से पहले फ़ाइल मैं लोड करना चाहते हैं:

[appdomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configpath) 
Add-Type -AssemblyName System.Configuration 
+3

वाह ... इन सभी वर्षों के बाद एक जवाब :)। धन्यवाद मैं इसे एक शॉट दूंगा। – Kev

+0

+1 बहुत बहुत धन्यवाद! नेट पर इस प्रॉब्लम का उल्लेख किया गया एकमात्र समाधान 'कॉन्फ़िगरेशन मैनेजर। ओपनमैप्डएक्स कॉन्फ़िगरेशन' है और किसी परिदृश्य के लिए कोई नहीं है जहां हमारे पास संदर्भित असेंबली पर नियंत्रण नहीं है! यह मेरे मामले के लिए बिल्कुल सही काम करता है। – fozylet

+2

यह कोड काम नहीं करता है, मैं रॉबर्ट मूनी के समाधान का उपयोग कर समाप्त हुआ: http://stackoverflow.com/questions/16216736/loading-app-config-into-the-appdomain#answer-33290175 –

6

मुझे लगता है कि सेटिंग्स को powerhell निर्देशिका में powerhell.exe.config में होना होगा, लेकिन यह चीजों को करने का एक बुरा तरीका प्रतीत होता है।

आप कॉन्फ़िगरेशन मैनेजर का उपयोग कर सकते हैं। ओपन मैप्डएक्स कॉन्फ़िगरेशन निष्पादन फ़ाइल को निष्पादित करने के बजाय निष्पादन डीएलएल नाम के आधार पर कॉन्फ़िगरेशन फ़ाइल खोलने के लिए, लेकिन यह स्पष्ट रूप से डीएलएल में परिवर्तन की आवश्यकता होगी।

+0

मैं इस तरह के समाधान का उपयोग नहीं करना चाहता हूं। इसे एक कंसोल ऐप में लपेटें जो डेटा को JSON के रूप में STDOUT, या ASP.NET WebAPI ऐप में लिखता है। कंसोल बनाम एपीआई के बीच पसंद होस्टिंग और सुरक्षा पर निर्भर करेगा। – yzorg

+0

इसका उपयोग करने का एक और कारण नहीं: PowerShell को ओएस, और powerhell.exe के साथ अपडेट किया जाता है।कॉन्फ़िगर एक संरक्षित ओएस फ़ाइल है, जिसका अर्थ है कि इसे नोटपैड के साथ संपादित नहीं किया जा सकता है। – yzorg

2

एक पुराने सवाल का एक नया उत्तर प्रयास कर रहा है।

मुझे लगता है कि आधुनिक उत्तर होगा: ऐसा मत करो। पावरशेल एक खोल है। खोल के हिस्सों के बीच जानकारी पास करने का सामान्य तरीका शैल चर है। powershell के लिए कि ऐसा दिखाई देगा:

$global:MyComponent_MySetting = '12' 
# i.e. 
$PSDefaultParameterValues 
$ErrorActionPreference 

सेटिंग्स प्रक्रियाओं सीमाओं सम्मेलन वातावरण चरों का उपयोग करने के लिए है भर में प्राप्त की जा करने के लिए अपेक्षित है। मैं इसे सेटिंग्स में विस्तारित करता हूं जो सी #/पावरशेल सीमा पार करते हैं। उदाहरण के एक जोड़े:

$env:PATH 
$env:PSModulePath 

अगर आपको लगता है इस नेट के लिए एक विरोधी पैटर्न आप पर पुनर्विचार करने के लिए चाहते हो सकता है। यह PAAS होस्ट किए गए ऐप्स के लिए मानक है, और सर्वर-अनुकूलित सीएलआर (एएसपी.नेट v5) पर चल रहे एएसपी.NET के लिए नया डिफ़ॉल्ट होने जा रहा है।

देखें https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
नोट: लेखन के समय मैं .AddEnvironmentVariables()

को जोड़ने कर रहा हूँ मैं इस सवाल कई बार दोबारा गौर किया है यह अपने आप पूछ भी शामिल है। मैं जमीन पर एक हिस्सेदारी रखना चाहता था कि PowerShell सामान <appSettings> के साथ अच्छी तरह से काम नहीं करता है। आईएमओ इस संबंध में .NET पहलू पर पीएस के शैल पहलू को गले लगाने के लिए बेहतर है।

यदि आपको जटिल कॉन्फ़िगरेशन की आवश्यकता है तो JSON स्ट्रिंग लें। POSH v3 + में ConvertFrom-JSON अंतर्निहित है। यदि आपकी प्रक्रिया में सबकुछ एक ही जटिल कॉन्फ़िगरेशन का उपयोग करता है तो इसे एक .json फ़ाइल में डाल दें और उस फ़ाइल को पर्यावरण चर से इंगित करें।

एक एकल फाइल पर्याप्त नहीं है, तो PATH पैटर्न की तरह अच्छी तरह से स्थापित समाधान देखते हैं, GIT संकल्प, या ASP.NET web.config संकल्प (जो मैं यहाँ दोहराना नहीं होगा) .gitignore।

+1

"* ऐसा मत करो। *" - निश्चित रूप से, और इस उत्तर में दिए गए समय की सराहना करते हैं। लेकिन पर्यावरण चर आदि इन विरासत असेंबली के साथ काम नहीं करेंगे, वे 'एपसेटिंग' संग्रह से अपनी कॉन्फ़िगरेशन पढ़ने में सक्षम होने की उम्मीद करते हैं। – Kev

+0

@ केवी तब उन विधानसभाओं को वास्तव में PowerShell संदर्भ में उपयोग नहीं किया जाना चाहिए। आपको PowerShell को स्वयं होस्ट करना पड़ सकता है। "एम्बेडिंग पावरशेल", एला विजुअल स्टूडियो का "पैकेज प्रबंधक कंसोल" देखें। – yzorg