簡體   English   中英

AppSettings 從 .config 文件獲取值

[英]AppSettings get value from .config file

我無法訪問配置文件中的值。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException

.config 文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- ... -->
    <add key="ClientsFilePath" value="filepath"/>
    <!-- ... -->
  </appSettings>
</configuration>

你有什么建議我應該怎么做?

這對我有用:

string value = System.Configuration.ConfigurationManager.AppSettings[key];

dtsg給出的答案有效:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

但是,您需要添加一個程序集引用

系統配置

轉到解決方案資源管理器,然后右鍵單擊 “引用”,然后選擇“ 添加引用” 選擇組件選項卡並搜索配置

參考經理

這是我的App.config的示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdminName" value="My Name"/>
    <add key="AdminEMail" value="MyEMailAddress"/>
  </appSettings>
</configuration>

您可以通過以下方式獲得:

string adminName = ConfigurationManager.AppSettings["AdminName"];

試試看:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

從配置讀取:

您需要添加對Config的引用

  1. 在您的項目上打開“屬性”
  2. 轉到“設置”標簽
  3. 添加“名稱”和“值”
  4. 使用以下代碼獲取價值:
string value = Properties.Settings.Default.keyname;

保存到配置:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

我在用:

    ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"];
    value2 = config.AppSettings.Settings["NewKey0"].Value;
    value3 = ConfigurationManager.AppSettings["NewKey0"];

其中value1 = ...value3 = ...給出null而value2 = ...起作用

然后,我決定將內部app.config替換為:

// Note works in service but not in wpf
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension");
ConfigurationManager.RefreshSection("appSettings");

string value = ConfigurationManager.AppSettings["NewKey0"];

使用VS2012 .net 4

app/web.config文件中,設置以下配置:

<configuration>
  <appSettings>
    <add key="NameForTheKey" value="ValueForThisKey" />
    ... 
    ...    
  </appSettings>
...
...
</configuration>

然后您可以在代碼中輸入以下內容來訪問此代碼:

string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"];

*請注意,此功能適用於.net4.5.x.net4.6.x 但不適用於.net core 最好的問候:拉斐爾

很久以后又回來了...

鑒於ConfigurationManager的消亡,對於仍然在尋找這種嘗試答案的任何人(例如):

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

當然需要System.Configuration。

(將代碼編輯為實際可行且易於閱讀的內容)

看到我做了我認為顯而易見的事情是:

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();

在編譯時,它始終返回null。

但是,這(從上面)有效:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

某些答案似乎與IMO有點關系這是我大約在2016年采取的行動

<add key="ClientsFilePath" value="filepath"/>

確保引用了System.Configuration

問題是要求設置鍵的

哪個應該是

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

這是您可以將值分組在一起的一種方式(不適用於此問題)

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"];

emails將為環境鍵+“ _Emails”的值

example :   jack@google.com;thad@google.com;

對於Web應用程序,我通常會編寫此方法,並僅通過鍵調用它。

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }

您可以簡單地輸入:

string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];

因為key是一個對象,而AppSettings需要一個字符串

ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

按照此處其他答案的建議,我的簡單測試也失敗了,直到我意識到我添加到桌面應用程序的配置文件被命名為“ App1.config”。 我將其重命名為“ App.config”,一切立即按預期進行。

  1. 在您的項目上打開“屬性”
  2. 轉到“設置”標簽
  3. 添加“名稱”和“值”

代碼將自動生成

  <configuration> <configSections> <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... > <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... /> </sectionGroup> </configSections> <applicationSettings> <XX....Properties.Settings> <setting name="name" serializeAs="String"> <value>value</value> </setting> <setting name="name2" serializeAs="String"> <value>value2</value> </setting> </XX....Properties.Settings> </applicationSettings> </configuration> 

獲得價值

Properties.Settings.Default.Name

要么

Properties.Settings.Default [“名稱”]

或者您可以使用

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

更新

ConfigurationManager 已過時,需要在.NET Сore 環境中使用IConfiguration(IConfiguration 由.NET Core 內置依賴注入提供)。

    private readonly IConfiguration config;

    public MyConstructor(IConfiguration config)
    {
        this.config = config;
    }
    public void DoSomethingFunction()
    {
        string settings1 = config["Setting1"];
    }

在我的情況下,我必須在 '@System.Configuration.ConfigurationManager.AppSettings["key"]' 的任一側拋出一個 ' 才能將其作為字符串讀入我的程序。 我正在使用 Javascript,所以這是在我的標簽中。 注意: ToString() 對我不起作用。

做這樣的事情:

string value1 = System.Configuration.ConfigurationManager.AppSettings.Get(0); //for the first key


string value2 = System.Configuration.ConfigurationManager.AppSettings.Get(1); //for the first key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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