当前位置:首页> 正文

关于配置文件:PowerShell App.Config

关于配置文件:PowerShell App.Config

PowerShell App.Config

有谁解决过如何使PowerShell使用app.config文件的问题? 我想在一个脚本中使用几个.NET DLL,但是他们希望在app.config / web.config中存在自己的配置节。


使用此线程进行交叉引用,这使我遇到了相同的问题:
从Powershell脚本中的引用DLL对App.Config连接字符串进行亚音速访问

在调用需要配置设置的DLL之前,我在脚本中添加了以下内容,其中$ configpath是我要加载的文件的位置:

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

请参阅此文章,以确保将指定的配置文件应用于正在运行的上下文。


我猜想这些设置必须在powershell目录中的powershell.exe.config中,但这似乎是一种不好的处理方式。

您可以使用ConfigurationManager.OpenMappedExeConfiguration打开基于执行DLL名称而不是应用程序exe的配置文件,但这显然需要更改DLL。


尝试对旧问题提供新的答案。

我认为现代的答案是:不要那样做。 PowerShell是一个外壳。在外壳的各个部分之间传递信息的通常方法是外壳变量。对于powershell,它看起来像:

1
2
3
4
$global:MyComponent_MySetting = '12'
# i.e.
$PSDefaultParameterValues
$ErrorActionPreference

如果期望跨进程边界继承设置,则约定是使用环境变量。我将其扩展到跨越C#/ PowerShell边界的设置。几个例子:

1
2
$env:PATH
$env:PSModulePath

如果您认为这是.NET的反模式,则可能需要重新考虑。这是PAAS托管应用程序的规范,它将成为在服务器优化的CLR(ASP.NET v5)上运行的ASP.NET的新默认设置。

参见https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
注意:在撰写本文时,我链接到.AddEnvironmentVariables()

我已经重访了这个问题几次,包括自己问这个问题。我想打个赌,说PowerShell的东西在上不能很好地工作。在这方面,IMO最好在.NET方面包含PS的外壳方面。

如果您需要复杂的配置,请使用JSON字符串。 POSH v3 +具有内置的ConvertFrom-JSON。如果您的流程中的所有内容都使用相同的复杂配置,请将其放入.json文件中,然后从环境变量指向该文件。

如果单个文件不能满足要求,则可以使用完善的解决方案,例如PATH模式,GIT .gitignore分辨率或ASP.NET web.config分辨率(在此不再赘述)。


展开全文阅读

相关内容