2017-06-16 13 views
0

コンフィグレーションファイルをコンフィグレーションファイルに保存しました。コンフィグレーションファイルをカスタムパスに保存していますが、コードは動作しません。コードをどのように変更すればよいですか?AppSettingを使用してコンフィグレーションファイルを読み込みます

の保存設定ファイル(パーフェクトワークス):

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"); 
    } 
} 
+0

「私の書かれたコードは、どのように私は私のコードを変更する必要があります動作しません?」 - 何がうまくいかないのか教えていただけますか?それは何をしているかしていないのですか? –

+0

私の設定ファイルをパス(Application.StartupPath + "\\ ss.ini") –

+0

から読み込もうとしましたが、私のReadSetting func Read Configファイルをデフォルトパス(application.exe.config)から読み込みました。 –

答えて

1

app.configファイルはアプリケーションパスに常にapplication_name.configという名前で保存されます。

設定をカスタムパスに保存する場合は、app.configファイルをバイパスして別のXMLファイルを使用することを検討してください。サンプルコードを以下に示します。

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); 
0
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(); 
関連する問題