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

有帮助吗?

解决方案

与此线程的交叉引用,这帮助我解决了同样的问题:从 Powershell 脚本中引用的 DLL 亚音速访问 App.Config 连接字符串

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

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

post 以确保指定的配置文件应用于运行上下文。

其他提示

我猜测这些设置必须位于 powershell 目录中的 powershell.exe.config 中,但这似乎是一种不好的做法。

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

尝试对一个老问题给出新的答案。

我认为现代的答案是:不要那样做。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+ 有 从 JSON 转换 内置。如果进程中的所有内容都使用相同的复杂配置,请将其放入 .json 文件中并从环境变量指向该文件。

如果单个文件不够,还有成熟的解决方案,例如 PATH 图案, GIT .gitignore 分辨率,或 ASP.NET web.config 决议(这里不再重复)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top