簡體   English   中英

如何在 C# 中獲取和設置環境變量?

[英]How do I get and set Environment variables in C#?

如何獲取環境變量,如果缺少某些內容,請設置值?

使用System.Environment類。

方法

var value = System.Environment.GetEnvironmentVariable(variable [, Target])

System.Environment.SetEnvironmentVariable(variable, value [, Target])

會為你做這項工作。

可選參數TargetEnvironmentVariableTarget類型的枚舉,它可以是以下之一: MachineProcessUser 如果省略它,則默認目標是當前進程。

我在使用 .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.configweb.config文件中,它們的名稱以百分比 ( % ) 為界,然后在代碼中展開。

  • 請注意,當環境變量的值發生更改(或設置了新的值)時,應關閉並重新打開 Visual Studio。

例如,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM