Модифицированная конфигурация записывается в другой файл конфигурации. - PullRequest
0 голосов
/ 09 мая 2018

Я читаю значения из файла app.config. После внесения некоторых изменений я сохраняю конфигурацию. Проблема в том, что изменения записываются в другой файл.

Значения читаются из GeoBagHostingService.exe.config. Изменения записываются в GeoBagService.dll.config

Мое решение содержит 2 проекта: GeoBagHostingService и GeoBagService, так что, возможно, именно здесь все и запутано.

Функционально я хочу заменить значение пароля зашифрованным значением. Поэтому, если в конфигурации содержится ключ «пароль», я заменяю его ключом «encryptedPassword», содержащим значение зашифрованного пароля.

Код, который я использую, содержится в классе в проекте de GeoBAGService.

Чтобы прочитать, изменить и сохранить конфигурацию, которую я использую:

// Opening the configuration (GeoBagHostingService.exe.config)
Configuration configuration = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);

var oraclePassword = ConfigurationManager.AppSettings["oraclePassword"];

if (!string.IsNullOrWhiteSpace(oraclePassword))
   {
     string encryptedPassword = EncryptString(oraclePassword, configPassword);
     configuration.AppSettings.Settings.Remove("oraclePassword");
     configuration.AppSettings.Settings.Remove("encryptedPassword");
     configuration.AppSettings.Settings.Add("encryptedPassword", encryptedPassword);

     // Writing back the changes (or so I thought)
     // encryptedPassword is now in GeoBagService.dll.config
     configuration.Save();
   }

else 
   { 
     oraclePassword = DecryptString(ConfigurationManager.AppSettings["encryptedpassword"], configPassword); 
   }

Что здесь происходит и как записать изменения в ту же конфигурацию, откуда они читаются?

1 Ответ

0 голосов
/ 09 мая 2018

Результат Assembly.GetExecutingAssembly().Location зависит от места, откуда вы звоните.

Если вы вызовете его в своем основном проекте (приложении), он вернет:

[MainProjectPath] \ [MainProjectName] .exe

Если вы вызываете его из другого проекта (библиотеки классов), он вернет:

[LibProjectPath] \ [LibProjectName] .dll

Вот почему вы получаете эти результаты.

...