PowerShell App.Config

前端 未结 3 1690
醉梦人生
醉梦人生 2020-12-04 22:16

Has anyone worked out how to get PowerShell to use app.config files? I have a couple of .NET DLL\'s I\'d like to use in one of my scripts but they expect their

3条回答
  •  [愿得一人]
    2020-12-04 22:37

    Attempting a new answer to an old question.

    I think the modern answer would be: don't do that. PowerShell is a shell. The normal way of passing information between parts of the shell are shell variables. For powershell that would look like:

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

    If settings is expected to be inherited across processes boundaries the convention is to use environment variables. I extend this to settings that cross C# / PowerShell boundary. A couple of examples:

    $env:PATH
    $env:PSModulePath
    

    If you think this is an anti-pattern for .NET you might want to reconsider. This is the norm for PAAS hosted apps, and is going to be the new default for ASP.NET running on server-optimized CLR (ASP.NET v5).

    See https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
    Note: at time of writing I'm linking to .AddEnvironmentVariables()

    I've revisited this question a few times, including asking it myself. I wanted to put a stake in the ground to say PowerShell stuff doesn't work well with . IMO it is much better to embrace the shell aspect of PS over the .NET aspect in this regards.

    If you need complex configuration take a JSON string. POSH v3+ has ConvertFrom-JSON built-in. If everything in your process uses the same complex configuration put it in a .json file and point to that file from an environment variable.

    If a single file doesn't suffice there are well established solutions like the PATH pattern, GIT .gitignore resolution, or ASP.NET web.config resolution (which I won't repeat here).

提交回复
热议问题