Pergunta

Alguém descobriu como fazer o PowerShell usar app.config arquivos?Eu tenho algumas DLLs .NET que gostaria de usar em um de meus scripts, mas eles esperam que suas próprias seções de configuração estejam presentes em app.config/web.config.

Foi útil?

Solução

Referência cruzada com este tópico, que me ajudou com a mesma pergunta:Acesso subsônico a strings de conexão App.Config de DLL referenciada no script Powershell

Adicionei o seguinte ao meu script, antes de invocar a DLL que precisa de configurações, onde $configpath é o local do arquivo que desejo carregar:

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

Ver esse post para garantir que o arquivo de configuração especificado seja aplicado ao contexto em execução.

Outras dicas

Suponho que as configurações teriam que estar em powershell.exe.config no diretório powershell, mas essa parece ser uma maneira ruim de fazer as coisas.

Você pode usar ConfigurationManager.OpenMappedExeConfiguration para abrir um arquivo de configuração com base no nome da DLL em execução, em vez do exe do aplicativo, mas isso obviamente exigiria alterações nas DLLs.

Tentando uma nova resposta para uma pergunta antiga.

Acho que a resposta moderna seria:não faça isso.PowerShell é um shell.A maneira normal de passar informações entre partes do shell são variáveis ​​de shell.Para o PowerShell, seria assim:

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

Se se espera que as configurações sejam herdadas através dos limites dos processos, a convenção é usar variáveis ​​de ambiente.Estendo isso para configurações que ultrapassam os limites do C#/PowerShell.Alguns exemplos:

$env:PATH
$env:PSModulePath

Se você acha que este é um antipadrão para .NET, você pode querer reconsiderar.Essa é a norma para aplicativos hospedados em PAAS e será o novo padrão para ASP.NET em execução em CLR otimizado para servidor (ASP.NET v5).

Ver https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Observação:no momento em que escrevo estou linkando para .AddEnvironmentVariables()

Revisitei essa questão algumas vezes, inclusive me perguntando.Eu queria apostar no terreno para dizer que as coisas do PowerShell não funcionam bem com <appSettings>.Na IMO, é muito melhor adotar o aspecto shell do PS do que o aspecto .NET nesse aspecto.

Se você precisar de uma configuração complexa, use uma string JSON.POSH v3 + tem ConverterFrom-JSON construídas em.Se tudo em seu processo usar a mesma configuração complexa, coloque-o em um arquivo .json e aponte para esse arquivo a partir de uma variável de ambiente.

Se um único arquivo não for suficiente, existem soluções bem estabelecidas como o PATH padrão, GIT.gitignore resolução, ou ASP.NET web.config resolução (que não vou repetir aqui).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top