Вопрос

Кто-нибудь придумал, как заставить PowerShell использовать app.config файлы?У меня есть пара .NET DLL, которые я хотел бы использовать в одном из своих скриптов, но они ожидают, что их собственные разделы конфигурации будут присутствовать в app.config/web.config.

Это было полезно?

Решение

Перекрестные ссылки на эту тему, которые помогли мне с тем же вопросом:Дозвуковой доступ к строкам подключения App.Config из указанной библиотеки DLL в скрипте Powershell

Я добавил следующее в свой скрипт перед вызовом библиотеки DLL, для которой требуются настройки конфигурации, где $configpath - это местоположение файла, который я хочу загрузить:

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

Видишь это опубликуйте, чтобы убедиться, что указанный файл конфигурации применен к текущему контексту.

Другие советы

Я предполагаю, что настройки должны быть в powershell.exe.config в каталоге powershell, но это, похоже, плохой способ делать что-то.

Вы можете использовать ConfigurationManager.OpenMappedExeConfiguration для открытия файла конфигурации на основе имени исполняемой библиотеки DLL, а не exe-файла приложения, но это, очевидно, потребует внесения изменений в библиотеки DLL.

Пытаюсь найти новый ответ на старый вопрос.

Я думаю, что современный ответ был бы таким:не делай этого.PowerShell - это оболочка.Обычным способом передачи информации между частями оболочки являются переменные оболочки.Для 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>.ИМО, в этом отношении гораздо лучше использовать аспект оболочки PS вместо аспекта .NET.

Если вам нужна сложная конфигурация, возьмите строку JSON.ШИКАРНЫЙ v3+ имеет Конвертировать из-JSON встроенный.Если все в вашем процессе использует одну и ту же сложную конфигурацию, поместите ее в файл .json и укажите на этот файл из переменной окружения.

Если одного файла недостаточно, существуют хорошо зарекомендовавшие себя решения, такие как PATH узор, Мерзавец .gitignore разрешение, или ASP.NET web.config резолюция (которую я не буду здесь повторять).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top