27

有没有人想出如何让 PowerShell 使用app.config文件?我想在我的一个脚本中使用几个 .NET DLL,但他们希望自己的配置部分出现在app.config/中web.config

4

3 回答 3

39

与此线程交叉引用,这帮助我解决了同样的问题: Subsonic Access To App.Config Connection Strings From Referenced DLL in Powershell Script

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

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

请参阅这篇文章以确保将指定的配置文件应用于运行上下文。

于 2011-04-11T17:52:41.520 回答
6

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

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

于 2008-08-20T14:11:34.300 回答
2

尝试对旧问题的新答案。

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

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

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

$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 的东西不能很好地与<appSettings>. 在这方面,IMO 最好采用 PS 的 shell 方面而不是 .NET 方面。

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

如果单个文件不够用,还有一些成熟的解决方案,例如PATH模式、GIT .gitignore解析或ASP.NET web.config解析(我不会在此重复)。

于 2015-01-30T17:40:23.960 回答