"Ссылка на объект не указывает на экземпляр объекта" при чтении конфигурационного файла. c#

Я пытаюсь открыть свой config файл и прочитать от туда значение (ключа или значения не важно) и получаю ошибку "Ссылка на объект не указывает на экземпляр объекта". Что я делаю не так? Код с формы:

private void Form1_Load(object sender, EventArgs e)
    {
        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
        fileMap.ExeConfigFilename = @"C:\MyApp.config"; 
        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        string c = configuration.AppSettings.Settings["Login"].Key;
        textBox1.Text = c;
    }

Код config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="Login" value="" />
    </appSettings>
</configuration>

Пожалуйста подскажите.


Ответы (2 шт):

Автор решения: Dori

Если тебе без разницы где будет лежать твой конфиг файл. То лучше использовать встроенный конфиг, который находится в твоем проекте. Тогда можно будет вместо всего кода в Form1_Load написать просто

 textBox1.Text = ConfigurationManager.AppSettings["Login"];

Если же тебе надо именно использовать сторонний конфиг, то тебе надо будет прописать в конфиге, который находится у тебя в проекте, следующее

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
  <appSettings file="C:\Users\MyApp.config">
    <add key="SomeValue" value="value" />
  </appSettings>
</configuration>

Основной трюк здесь в строчке file="C:\Users\MyApp.config" здесь ты указываешь путь к дополнительному конфигу из которого будут вычитываться данные. Так же тебе будут доступны данные из стандартного конфига приложения. Произойдет мерж двух конфигов. Второй конфиг должен будет иметь следующую структуру

<appSettings>
        <add key="Login" value="aaaaaaa" />
</appSettings>

И тогда ты можешь использовать внешний конфиг к доплнению к стандартному и так же просто написать:

textBox1.Text = ConfigurationManager.AppSettings["Login"];

Если есть какие-то вопросы, то могу пояснить

→ Ссылка
Автор решения: Sherlock_201

Спасибо большое всем за ответы! Но я смогла найти сама ответ на свой вопрос. Данный выше код работает прекрасно если создавать не config файл, а xml и тогда все прекрасно редактируется и изменяется. Еще один не мало важный факт.. не знаю почему, но программно нельзя сохранить пустую строку! Что меня удивило, ведь и в config и в xml можно прописать пустое значение и все будет работать... (PS: Данный код xml можно прописать и в конфиг) Так же обращение к Xml файлу исправило ошибку заданную мной в вопросе.

Прикладываю свой код решения. Вдруг кому-нибудь пригодится...

Код в Form1:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (textBox2.Text.Length > 0 && textBox3.Text.Length > 0 && st == true && checkBox1.Checked == true)
        {
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = @"C:\Project\Visual Studio\Agenstvo\XMLFile1.xml";
            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            configuration.AppSettings.Settings["Login"].Value = " ";
            configuration.AppSettings.Settings["Password"].Value = " ";
            configuration.AppSettings.Settings["check"].Value = Convert.ToString(checkBox1.Checked);
            configuration.Save();
        }

Код в Form2:

 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (avt != true)
        {
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = @"C:\Project\Visual Studio\Agenstvo\XMLFile1.xml";
            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            configuration.AppSettings.Settings["Login"].Value = " ";
            configuration.AppSettings.Settings["Password"].Value = " ";
            configuration.AppSettings.Settings["check"].Value = Convert.ToString(false);
            configuration.Save();
        }
    }

Xml файл код:

 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
     <appSettings>
   <add key="Login" value="" />
   <add key="Password" value="" />
   <add key="check" value="False" />
     </appSettings>
 </configuration>
→ Ссылка