PowerShell App.Config

Quelqu'un a-t-il trouvé comment faire pour que PowerShell utilise les fichiers app.config ? J'ai quelques DLL. net que j'aimerais utiliser dans un de mes scripts, mais ils s'attendent à ce que leurs propres sections de configuration soient présentes dans app.config / web.config .

24
demandé sur Kev 2008-08-20 17:33:58

3 réponses

recoupements avec ce fil, qui m'a aidé avec la même question: Subsonique, L'Accès À L'Application.Chaînes de connexion de configuration de la DLL référencée dans le Script Powershell

j'ai ajouté ce qui suit à mon script, avant d'invoquer la DLL qui nécessite des paramètres de configuration, où $configpath est l'emplacement du fichier que je veux charger:

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

Voir ce post afin d'assurer le fichier de configuration spécifié est appliqué au contexte de fonctionnement.

35
répondu millerjs 2018-08-10 05:04:56

je suppose que les réglages doivent être en powershell.EXE.config dans le powershell répertoire, mais cela semble être une mauvaise façon de faire les choses.

vous pouvez utiliser ConfigurationManager.OpenMappedExeConfiguration pour ouvrir un fichier de configuration basé sur le nom DLL d'exécution, plutôt que l'application exe, mais cela nécessiterait évidemment des modifications aux DLLs.

6
répondu samjudson 2008-08-20 14:11:34

tentative d'une nouvelle réponse à une ancienne question.

je pense que la réponse moderne serait: ne faites pas cela. PowerShell est une coquille. La manière normale de transmettre des informations entre les parties du shell sont des variables shell. Pour powershell qui ressemblerait à:

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

si l'on s'attend à ce que les paramètres soient hérités au-delà des limites des processus, la convention est d'utiliser des variables d'environnement. J'étends ceci aux réglages qui franchissent la limite c# / PowerShell. Quelques exemples:

$env:PATH
$env:PSModulePath

si vous pensez que c'est un anti-modèle pour .NET, vous pourriez vouloir reconsidérer. C'est la norme pour les applications hébergées PAAS, et va être la nouvelle norme par défaut pour ASP.NET exécution sur le CLR optimisé par le serveur (ASP.NET v5).

voir https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21

Remarque: au moment de l'écriture, je suis lien vers .AddEnvironmentVariables()

j'ai revu cette question à plusieurs reprises, y compris en me la posant moi-même. Je voulais mettre un pieu dans le sol pour dire que le truc de PowerShell ne fonctionne pas bien avec <appSettings> . À cet égard, il est bien préférable d'adopter L'aspect shell de PS plutôt que L'aspect.net.

si vous avez besoin d'une configuration complexe, prenez une chaîne JSON. POSH v3+ a ConvertFrom-JSON built-in. Si tout dans votre le processus utilise la même configuration complexe que dans A.fichier json et pointer vers ce fichier à partir d'une variable d'environnement.

si un seul fichier ne suffit pas, il existe des solutions bien établies comme le modèle PATH , GIT .gitignore résolution, ou ASP.NET web.résolution config (que je ne répéterai pas ici).

2
répondu yzorg 2015-01-30 17:40:23