![](/img/trans.png)
[英]How do environment variables know what environment I am running on and how do I set them in C#?
[英]How do I get and set Environment variables in C#?
如何獲取環境變量,如果缺少某些內容,請設置值?
方法
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
和
System.Environment.SetEnvironmentVariable(variable, value [, Target])
會為你做這項工作。
可選參數Target
是EnvironmentVariableTarget
類型的枚舉,它可以是以下之一: Machine
、 Process
或User
。 如果省略它,則默認目標是當前進程。
我在使用 .NET 控制台應用程序讀取 PATH 環境變量時遇到了這個問題,發現使用 System.Environment.GetEnvironmentVariable 會自動擴展環境變量。
我不希望這種情況發生……這意味着路徑中的文件夾(例如“%SystemRoot%\\system32”)被重寫為“C:\\Windows\\system32”。 為了獲得未擴展的路徑,我不得不使用這個:
string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
對我來說就像一種魅力。
獲取和設置
得到
string getEnv = Environment.GetEnvironmentVariable("envVar");
放
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
這將適用於機器設置的環境變量。 對於用戶,只需改為用戶即可。
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
在 Visual Studio 2019 中——右鍵單擊您的項目,選擇“屬性”>“設置”,通過為其指定名稱(如 ConnectionString)、類型和值來添加新變量。 然后在您的代碼中閱讀它:
var sConnectionStr = Properties.Settings.Default.ConnectionString;
這些變量將存儲在配置文件(web.config 或 app.config)中,具體取決於您的項目類型。 下面是一個示例:
<applicationSettings>
<Testing.Properties.Settings>
<setting name="ConnectionString" serializeAs="String">
<value>data source=blah-blah;etc-etc</value>
</setting>
</Testing.Properties.Settings>
</applicationSettings>
我可以使用以下方法更新環境變量
string EnvPath = System.Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine) ?? string.Empty;
if (!string.IsNullOrEmpty(EnvPath) && !EnvPath .EndsWith(";"))
EnvPath = EnvPath + ';';
EnvPath = EnvPath + @"C:\Test";
Environment.SetEnvironmentVariable("PATH", EnvPath , EnvironmentVariableTarget.Machine);
如果讀取環境變量的目的是覆蓋 appsetting.json 或任何其他配置文件中的值,您可以通過EnvironmentVariablesExtensions對其進行存檔。
var builder = new ConfigurationBuilder()
.AddJsonFile("appSettings.json")
.AddEnvironmentVariables(prefix: "ABC_")
var config = builder.Build();
根據此示例,環境的 Url 是從 appsettings.json 中讀取的。 但是當AddEnvironmentVariables(prefix: "ABC_")
行添加到 ConfigurationBuilder 時,值 appsettings.json 將被環境變量值覆蓋。
環境變量也可以放置在應用程序的app.config
或web.config
文件中,它們的名稱以百分比 ( %
) 為界,然后在代碼中展開。
例如,在app.config
:
<connectionStrings>
<add name="myConnectionString" connectionString="%DEV_SQL_SERVER_CONNECTION_STRING%" providerName="System.Data.SqlClient" />
</connectionStrings>
然后在代碼中:
string connectionStringEnv = ConfigurationManager.AppSettings["myConnectionString"];
string connectionString = System.Environment.ExpandEnvironmentVariables(connectionStringEnv);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.