【发布时间】:2018-09-19 11:13:38
【问题描述】:
我有一个打印 App.config 值的 C# 控制台程序。我可以从环境变量中覆盖这个值吗?
在我的实际用例中,该值指定要绑定的端口,并且我需要在我的 Jenkins 服务器中运行该程序的多个实例,因此即使它们使用相同的配置文件,每个实例也应该具有不同的值。
示例 App.config:
<appSettings>
<add key="TestKey" value="Foo"/>
</appSettings>
示例代码:
Console.WriteLine($"Key: {ConfigurationManager.AppSettings["TestKey"]}");
我尝试只设置密钥名称,但这显然不起作用:
c:\Workspace\ConsoleApp2\ConsoleApp2\bin\Debug>set TestKey=Bar
c:\Workspace\ConsoleApp2\ConsoleApp2\bin\Debug>ConsoleApp2.exe
Key: Foo
【问题讨论】:
-
不,Microsoft 非常讨厌环境变量,以至于无法考虑使其发挥作用。他们也应该这样做。您必须编写代码,使用 Environment.GetEnvironmentVariable() 来确定它是否已设置。
-
@HansPassant,能否以编程方式设置 ConfigurationManager.AppSettings 字典值但不影响底层 XML 文件?如果是这样,我可以在启动时执行一些代码,从环境变量中读取相关属性并设置它们。
标签: c# environment-variables appsettings