سؤال

هل توصل أي شخص إلى كيفية استخدام PowerShell app.config الملفات؟لدي اثنين من ملفات .NET DLL التي أرغب في استخدامها في أحد البرامج النصية الخاصة بي ولكنهم يتوقعون وجود أقسام التكوين الخاصة بهم في app.config/web.config.

هل كانت مفيدة؟

المحلول

الرجوع إلى هذا الموضوع، والذي ساعدني على نفس السؤال:الوصول دون سرعة الصوت إلى سلاسل اتصال App.Config من ملف DLL المشار إليه في Powershell Script

أضفت ما يلي إلى البرنامج النصي الخاص بي، قبل استدعاء ملف DLL الذي يحتاج إلى إعدادات التكوين، حيث يكون $configpath هو موقع الملف الذي أريد تحميله:

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

يرى هذا post للتأكد من تطبيق ملف التكوين المحدد على السياق قيد التشغيل.

نصائح أخرى

أعتقد أن الإعدادات يجب أن تكون في powershell.exe.config في دليل powershell، ولكن يبدو أن هذه طريقة سيئة للقيام بالأشياء.

يمكنك استخدام ConfigurationManager.OpenMappedExeConfiguration لفتح ملف تكوين استنادًا إلى اسم DLL الذي يتم تنفيذه، بدلاً من ملف exe الخاص بالتطبيق، ولكن من الواضح أن هذا يتطلب إجراء تغييرات على ملفات DLL.

محاولة إجابة جديدة لسؤال قديم.

أعتقد أن الإجابة الحديثة ستكون:لا تفعل ذلك.PowerShell عبارة عن صدفة.الطريقة العادية لتمرير المعلومات بين أجزاء الصدفة هي متغيرات الصدفة.بالنسبة لبوويرشيل الذي سيبدو كما يلي:

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

إذا كان من المتوقع أن يتم توريث الإعدادات عبر حدود العمليات، فالاتفاقية هي استخدام متغيرات البيئة.أقوم بتوسيع هذا ليشمل الإعدادات التي تتجاوز حدود C# / PowerShell.بعض الأمثلة:

$env:PATH
$env:PSModulePath

إذا كنت تعتقد أن هذا نموذج مخالف لـ .NET، فقد تحتاج إلى إعادة النظر.هذا هو المعيار للتطبيقات المستضافة لـ PAAS، وسيكون هو الإعداد الافتراضي الجديد لـ ASP.NET الذي يعمل على CLR المُحسّن للخادم (ASP.NET v5).

يرى https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
ملحوظة:في وقت كتابة هذا المقال أنا ربط ل .AddEnvironmentVariables()

لقد قمت بإعادة النظر في هذا السؤال عدة مرات، بما في ذلك طرحه بنفسي.كنت أرغب في وضع حصة في الأرض لأقول إن عناصر PowerShell لا تعمل بشكل جيد معها <appSettings>.من الأفضل للمنظمة البحرية الدولية (IMO) احتضان جانب الصدفة لـ PS عبر جانب .NET في هذا الصدد.

إذا كنت بحاجة إلى تكوين معقد، فاستخدم سلسلة JSON.POSH v3+ لديه تحويل من-JSON مدمج.إذا كان كل شيء في عمليتك يستخدم نفس التكوين المعقد، فضعه في ملف .json وأشر إلى هذا الملف من متغير البيئة.

إذا لم يكن ملف واحد كافيًا، فهناك حلول راسخة مثل ملف PATH نمط، بوابة .gitignore القرار، أو ASP.NET web.config القرار (والذي لن أكرره هنا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top