Domanda

Qualcuno ha capito come utilizzare PowerShell app.config File?Ho un paio di DLL .NET che vorrei utilizzare in uno dei miei script, ma si aspettano che siano presenti le proprie sezioni di configurazione app.config/web.config.

È stato utile?

Soluzione

Riferimento incrociato con questo thread, che mi ha aiutato con la stessa domanda:Accesso subsonico alle stringhe di connessione App.Config dalla DLL di riferimento nello script PowerShell

Ho aggiunto quanto segue al mio script, prima di richiamare la DLL che necessita di impostazioni di configurazione, dove $configpath è la posizione del file che voglio caricare:

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

Vedere Questo post per garantire che il file di configurazione specificato venga applicato al contesto in esecuzione.

Altri suggerimenti

Immagino che le impostazioni dovrebbero essere in powershell.exe.config nella directory di PowerShell, ma sembra essere un pessimo modo di fare le cose.

È possibile utilizzare ConfigurationManager.OpenMappedExeConfiguration per aprire un file di configurazione in base al nome della DLL in esecuzione, anziché all'exe dell'applicazione, ma ciò richiederebbe ovviamente modifiche alle DLL.

Tentare una nuova risposta a una vecchia domanda.

Penso che la risposta moderna sarebbe:non farlo.PowerShell è una shell.Il modo normale di passare informazioni tra le parti della shell sono le variabili di shell.Per PowerShell sarebbe simile a:

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

Se si prevede che le impostazioni vengano ereditate oltre i confini dei processi, la convenzione consiste nell'utilizzare variabili di ambiente.Lo estendo alle impostazioni che oltrepassano il limite C#/PowerShell.Un paio di esempi:

$env:PATH
$env:PSModulePath

Se ritieni che questo sia un anti-pattern per .NET, potresti voler riconsiderare.Questa è la norma per le app ospitate PAAS e sarà la nuova impostazione predefinita per ASP.NET in esecuzione su CLR ottimizzato per il server (ASP.NET v5).

Vedere https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Nota:al momento in cui scrivo mi sto collegando a .AddEnvironmentVariables()

Ho rivisitato questa domanda alcune volte, anche ponendola io stesso.Volevo mettere un paletto nel terreno per dire che le cose di PowerShell non funzionano bene <appSettings>.IMO è molto meglio abbracciare l'aspetto shell di PS rispetto all'aspetto .NET a questo riguardo.

Se hai bisogno di una configurazione complessa, prendi una stringa JSON.POSH v3+ ha ConvertFrom-JSON integrato.Se tutto nel tuo processo utilizza la stessa configurazione complessa, inseriscilo in un file .json e punta a quel file da una variabile di ambiente.

Se un singolo file non è sufficiente esistono soluzioni consolidate come PATH modello, GIT .gitignore risoluzione, o ASP.NET web.config risoluzione (che non ripeterò qui).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top