2016-02-26 23 views
3

我試圖從自定義配置文件中訪問配置項,但得到錯誤CS0122。訪問Custom.Configuration文件中的AppSettings(CS0122)

類別:

using System; 
using System.IO; 
using System.Configuration; 
using System.Windows.Forms; 

public class SaveLoadSettings 
{ 
    private static string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "XMLConverterForTelekomInvoice", "XMLConverterForTelekomInvoice.config"); 
} 

函數寫設置:(這是工作良好)

private static void AddUpdateAppSettings(string key, string value) 
    { 
     try 
     { 
      var configFile = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = path }, ConfigurationUserLevel.None); 
      var settings = configFile.AppSettings.Settings; 
      if (settings[key] == null) 
      { 
       settings.Add(key, value); 
      } 
      else 
      { 
       settings[key].Value = value; 
      } 
      configFile.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); 
     } 
     catch (ConfigurationErrorsException) 
     { 
      MessageBox.Show("Error writing app settings"); 
     } 
    } 

功能讀取設置:

private static string ReadSetting(string key) 
    { 
     try 
     { 
      Configuration MyAppConfig = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = path }, ConfigurationUserLevel.None); 
      var appSettings = MyAppConfig.AppSettings; 
      string result = appSettings[key] ?? string.Empty; 
      return result; 
     } 
     catch (ConfigurationErrorsException) 
     { 
      MessageBox.Show("Error reading app settings"); 
      return string.Empty; 
     } 
    } 
(此上的appSettings [鍵]產生CS0122)

XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
     <add key="Setting1" value="25" /> 
     <add key="Setting2" value="10" /> 
    </appSettings> 
</configuration> 

我是一個編碼的新手,我無法弄清楚我的代碼中有什麼問題。也許有些人可以幫助我。 問候神明

問題我在修改一些代碼跑:

string result = appSettings.Settings[key] ?? string.Empty; // Generates CS0019 ?? Operator can't be used on KeyValueConfigurationElement 
string result = appSettings.Settings[key].ToString() ?? string.Empty; // Throws "System.NullReferenceException" in Runtime 
+0

可你p租約說道路的價值是什麼? –

回答

0

這是我的對於問題的解決:

private static string ReadSettingString(string key) 
{ 
    try 
    { 
     Configuration MyAppConfig = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = path }, ConfigurationUserLevel.None); 
     var appSettings = MyAppConfig.AppSettings; 
     string result = appSettings?.Settings?[key]?.Value ?? string.Empty; 
     return result; 
    } 
    catch (ConfigurationErrorsException) 
    { 
     MessageBox.Show("Error reading app settings"); 
     return string.Empty; 
    } 
} 

感謝您的幫助史蒂夫旺

2

編譯器抱怨這行:string result = appSettings[key] ?? string.Empty;,具體而言,appSettings[key]不可訪問,由於它的保護級別。

從您的自定義config文件中提取設定值時,您可以使用設置屬性上的appSettings實例:

private static string ReadSetting(string key) 
    { 
     try 
     { 
      Configuration MyAppConfig = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = path }, ConfigurationUserLevel.None); 
      var appSettings = MyAppConfig.AppSettings; 
      string result = appSettings.Settings[key].Value ?? string.Empty; // ** change here 
      return result; 
     } 
     catch (ConfigurationErrorsException) 
     { 
      MessageBox.Show("Error reading app settings"); 
      return string.Empty; 
     } 
    } 

編輯:固定碼(缺.value的)

+0

@kami好的,你能讀取配置文件中的設置嗎?或者其他一些問題? –

+0

親愛的史蒂夫, 我曾試過,但後來遇到其他問題。 string result = appSettings.Settings [key] ??的String.Empty; //生成CS0019?運算符不能用於KeyValueConfigurationElement string result = appSettings.Settings [key] .ToString()??的String.Empty; //在運行時拋出「System.NullReferenceException」 – kami

+0

@kami - 抱歉,卡米,我錯誤地複製了代碼。我已編輯包含.Value屬性(它返回一個字符串) –