【问题标题】:Read Config File using AppSetting使用 AppSetting 读取配置文件
【发布时间】:2017-06-16 11:07:57
【问题描述】:

我已使用 ConfigurationManager 类将我的应用程序设置存储在配置文件中,我的配置文件位于自定义路径中,现在我想读取我的配置文件但我的代码不起作用。我应该如何更改我的代码?

存储配置文件(完美运行):

static void AddUpdateAppSettings2(string key, string value)
{
    try
    {
        string _path = Application.StartupPath + "\\ss.ini";
        ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap()
        {
            ExeConfigFilename = _path
        };
        Configuration configFile = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, 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)
    {
        Console.WriteLine("Error writing app settings");
    }
}

读取配置文件(不起作用,仅当我的配置文件存储为默认路径时才有效):

static void ReadSetting(string key)
{
    try
    {
        var appSettings =ConfigurationManager.AppSettings;
        string result = appSettings[key] ?? "Not Found";
        Console.WriteLine(result);
    }
    catch (ConfigurationErrorsException)
    {
        Console.WriteLine("Error reading app settings");
    }
}

【问题讨论】:

  • “我的书面代码不起作用我必须如何更改我的代码?” - 你能告诉我们什么不起作用吗?它在做什么或不做什么?
  • 我尝试从路径读取我的配置文件 (Application.StartupPath + "\\ss.ini")
  • 但我的 ReadSetting func 从默认路径读取配置文件 (application.exe.config)

标签: c# config configuration-files configurationmanager


【解决方案1】:

作为转换,app.config 文件始终以application_name.config 名称存储在应用程序路径中。

如果您想将配置存储在自定义路径中,请考虑使用单独的 XML 文件绕过 app.config 文件。以下是示例代码:

internal sealed class AppSettingsSerializer
{
    private AppSettingsSerializer() { }

    static int BufferSize { get { return 4096; } }

    internal static AppSettings GetAppSettings(string filePath)
    {
        if(File.Exists(filePath) == false)
            return new AppSettings();

        XmlSerializer xmlSerializer = new XmlSerializer(typeof(AppSettings));
        using(FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None, BufferSize, FileOptions.SequentialScan))
        {
            XmlReader xmlReader = XmlReader.Create(fileStream);
            return (AppSettings)xmlSerializer.Deserialize(xmlReader);
        }
    }

    internal static void SetAppSettings(string filePath, AppSettings appSettings)
    {
        XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
        xmlSerializerNamespaces.Add("", "");

        XmlSerializer xmlSerializer = new XmlSerializer(typeof(AppSettings));
        using(FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, BufferSize, FileOptions.WriteThrough))
        {
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
            xmlWriterSettings.Indent = true;
            xmlWriterSettings.NewLineOnAttributes = true;

            XmlWriter xmlWriter = XmlWriter.Create(fileStream, xmlWriterSettings);
            xmlSerializer.Serialize(xmlWriter, appSettings, xmlSerializerNamespaces);
        }
    }
}

public sealed class AppSettings
{
    public bool Setting1 { get; set; }
    public string Setting2 { get; set; }

    public AppSettings()
    {
        Setting1 = false;
        Setting2 = "localhost";
    }
}

以下是用法:

AppSettings appSettings = appSettings = AppSettingsSerializer.GetAppSettings(appSettingsFilePath);
AppSettingsSerializer.SetAppSettings(appSettingsFilePath, appSettings);

【讨论】:

    【解决方案2】:
    web.config 
    
    <configuration>
      <appSettings>
     <add key="ConnectionString" value="your connectionstring"/>
      </appSettings>
    </configuration>
    
    .cs file
    
     string connectionstring= ConfigurationManager.AppSettings["your connectionstring name is called in web.config"].ToString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2011-09-24
      • 2017-09-22
      • 2013-10-23
      • 2013-10-12
      相关资源
      最近更新 更多